如何定义php 函数 不定参数数函数

wicrewoft 的BLOG
用户名:wicrewoft
文章数:78
评论数:26
访问量:160226
注册日期:
阅读量:5863
阅读量:12276
阅读量:351067
阅读量:1049590
[匿名]51cto游客:
[匿名]dalikfc:
[匿名]51cto游客:
51CTO推荐博文
&Objective-C 中有许多不定参数函数,像 NSLog(format, arg1, arg2),还有字符串或数组在构造时所用的 [NSString stringWithFormat: format, arg1, arg2, arg3],它们的方法原型分别是:
FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
+ (id)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
应该去掉后面的 NS_FORMAT_FUNCTION(1,2) 来看,否来会干扰到思维。我们现在的例子还不需要这么写,至于 NS_FORMAT_FUNCTION(1,2) 的功用为何,我有时间还得好生看下。OK, 看多了 Apple 的那些可变参函数,可能反而令你感到费解,还不如来试个实际的例子:
- (void)foo:(NSString *)format, ...
& & va_start(args, format);
& & NSString *str = [[NSString alloc] initWithFormat:format arguments:args];
& & va_end(args);
& & printf([str UTF8String]);
& & [str release];
- (IBAction) doo: (UIButton*) sender
& & //须留意不定参函数的调用格式,逗号分隔的序列,应该它们整体是作为函数的一个参数传入
& & [self foo : @&My name %@, %@&, @&Unmi&, @&Yes&];
上面的代码我未加注释,演示的是点击界面某个按钮来触发执行的,调用 NSString 的 initWithFormat 把传入的格式字符串及后面不定数量的参数拼接成一个字符串,然后打印出:
My name Unmi, Yes
到现了,已经有个体验了,也看到 va_list,va_start,va_end 那几个西正是处理不定参数的关键元件。下面要稍加深入去理解它们了。
现在重写前面的 foo 方法:
- (void)foo:(NSString *) format, ...
& & NSString* eachA
& & va_list argL
& & if (format) & & & & & & & & & & &// 第一个参数 format 是不属于参数列表的,
& & { & & & & & & & & & & & & & & & & &
& & & & va_start(argList, format); & & & & &// 从 format 开始遍历参数,不包括 format 本身.
& & & & while (eachArg = va_arg(argList, NSString*)) // 从 args 中遍历出参数,NSString* 指明类型
& & & & & & NSLog(@&%@&,eachArg); & & & & & & &// 打印出每一个参数.
& & & & va_end(argList);
可以逐个打印出第一个之后的参数,如:
02:05:28.840 Ohh[21874:40b] Unmi
02:05:31.279 Ohh[21874:40b] Yes
每一个参数都能处理,那接下来自己写更复杂的类似函数不会有什么问题了,不定参数可以指定任何实际的类型,(id) 可真是任何类型了。
跟 Java 的不定参函数一样,不定的那些参数最终是作为函数的一个数组参数,Objective-C 的那堆参数也是变成函数的一个参数 args 参数列表。而且同样的,Objective-C 的不定参数,即 ... 也必须放在函数的最后面,如还有其他参数时,foo 要写成:
- (void)foo: state: (BOOL) enable withFormat: (NSString *)format, ...
而不能是:
- (void)foo: format: (NSString *)format, ... withState: (BOOL) enable
最后那几个关键件要说明一下:
va_list argList:定义一个指向个数可变的参数列表指针;
va_start(argList,statement):使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数,说明:argN是位于第一个可选参数之前的固定参数,(或者说,最后一个 固定参数;&之前的一个参数),函数参数列表中参数在内存中的顺序与函数声明时的顺序是一致的。如果有一va函数的声明是void va_test(char a, char b, char c, &),则它的固定参数依次是a,b,c,最后一个固定参数argN为c,因此就是va_start(arg_ptr, c)。
va_arg(argList,id):返回参数列表中指针arg_ptr所指的参数,返回类型为type,并使指针arg_ptr指向参数列表中下一个参数。
va_end(arg_ptr):清空参数列表,并置参数指针arg_ptr无效。
在调用的时候要在参数结尾的时候加 nil,回想下 [NSMutableArray arrayWithObjects: 1, 2, 3, nil] 这个构造过程,最后一个 nil 能让 va_arg 取参数时碰到 nil 则断定为 NO,终止循环。为何像 NSLog 调用不需要最后一个 nil?
参考:1. 关于可变参数函数的定义
2. Object c-可变参数函数的定义
http://unmi.cc/obejctive-c-var-arguments
了这篇文章
类别:┆阅读(0)┆评论(0)请教不定长参数的函数如何定义? - 『 提问交流 』 -
AUTOIT CN AutoIt中文论坛|acn|au3|软件汉化 - 分享您的技术!
帖子98&精华0&积分60&威望1 点&金钱1953 块&贡献9 分&阅读权限20&在线时间75 小时&注册时间&最后登录&
请教不定长参数的函数如何定义?
请问autoit能否写出不定长参数的函数,像printf那样的?
虽然autoit本身可提供不定长的参数$cmdline[],但Function如何写我不清楚,谢谢各位帮助!
帖子602&精华0&积分380&威望15 点&金钱2881 块&贡献49 分&阅读权限30&在线时间360 小时&注册时间&最后登录&
要是要求不严格的话,参数用数组呗,或者就用字符串(传递时,参数1+分隔符+参数2+分隔符+...),函数里具体把参数进行分解成各个小参数。。
[通过 QQ、MSN 分享给朋友]8-6、自定义函数(参数不定)
作者:51zxw
来源:我要自学网
视频下载中。。。
为了防止盗链接,请使用会员帐号登陆,未有会员帐号的朋友请点击“注册”,免费获得帐号,多谢合作!
通知:视频如无法播放,请联系QQ 检修,谢谢!
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
赞助商链接
本周热门内容
赞助商链接关于c++的不定参数类型和参数个数的函数int&add(int&a1,...){&&&&va_list&arg_&&&&int&sum=0;&&&&int&tempV&&&&sum=sum+a1;&&&&va_start(arg_ptr,a1)&&&&&&&&do&&&&{&&&&&&&&&&tempValue=/cpp/va_arg(arg_ptr,int);&&&&&&&&&&sum+=tempV&&&&}while(tempValue!=0);&&&&va_end(arg_ptr);&&&&return&}以下两种调用int&main(){&&&&&cout&&add(1,2,3,4,0)&&//输出结果是10&&&&&cout&&add(1,2,"book",3,4,0)&&//输出结果就不是10}查了一下说那个va_arg不能自动识别参数个数和类型,那么怎么自定一个东西,在va_arg&遍历的时候可以识别所遍历的参数的类型啊?请各位大神给予指导!也就是后说,遇到上面第二种调用的时候,如果遍历到book的时候直接忽略掉?
你应该在能分辨参数类型的时候做出某种选择,而不是在函数内已经转化为int的时候再做出选择。换句话说,在调用函数之前,把不合格的参数“剔除”。G++&4.4.1&以上版本都可以通过均输出10#include&&iostream&using&namespace&int&add(&int&v&);template&class&T&int&add(&T&v&);template&class&T&,&class&...&Types&int&add(&T&v&,&&Types&...&args&);template&class&...Types&int&add(&int&v&,&Types&...&args&);

我要回帖

更多关于 js 不定参数函数 的文章

 

随机推荐