赞 | 0 |
VIP | 135 |
好人卡 | 6 |
积分 | 2 |
经验 | 37799 |
最后登录 | 2020-4-30 |
在线时间 | 812 小时 |
Lv1.梦旅人 旅之愚者
- 梦石
- 0
- 星屑
- 240
- 在线时间
- 812 小时
- 注册时间
- 2007-7-28
- 帖子
- 2148
|
本帖最后由 六祈 于 2010-10-22 21:58 编辑
2010-9-10
咱也来抢一楼,今天聊聊参数的话题吧~
比如def method_a(arg1 , arg2 , ……);end
这样子是最普通的~
method_a有两个参数分别是arg1和arg2,这两个会作为局部变量被传入到方法内部,完成方法并返回后应该会由GC回收
默认参数,是指参数有默认值
形如def method_b(arg1 , arg2 = 3);end
这样调用方法时,如果仅仅传入一个实参,则arg2为默认的3【默认参数需要放在常规参数后面】
剩余参数,指将个数不明的参数作为一个数组的元素传入
形如def method_c(arg1 , *args);end
则使传入的参数中,第一个赋值给arg1,其余的成为一个数组args,以args[0]等方式调用
另外,在方法调用的参数里也可以使用*,那个是将数组展开作为参数,如下:
def method_c2(arg1,arg2,arg3);end;method_c2(*[1 , 2 , 3]);end
关键字参数,指在形参最后用一个哈希表作为关键词参数
例子:def method_d(arg1 , keys = {});end
而在调用时,可以这样写method_d(1 , {:a => 1 , :b =>2})【哈希作为最后一个参数时,可以省略大括号,称为裸哈希】
则在方法体内部,就可以用用keys[:a]和keys[:b]分别取得1和2的值
【另外剩余参数和关键词参数不可同时使用,理由自己想吧】
另外再提下块,块也可以是参数,比如数组的迭代方法each,如果自己写的话,如下:- class Array
- def each(&block)
- for i in 0...self.length
- block.call(self[i])
- end
- end
- end
复制代码 这里的&指将方法调用时的代码块赋值给block这个变量,然后在方法体内迭代
而在方法调用时,也可以使用&,但意义不同,使用方法如下:
pro = Proc.new{|a| puts a}
[*1..8].each(&pro)
即可完成相当于:
[1,2,3,4……,8].each do |i|
puts i
end
的功能
即在实参中对一个变量前加&可以隐式调用该变量的【to_proc】方法并将之传入方法的代码块参数 |
|