浏览 7074 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (3) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-18
最后修改:2009-07-08
Block,lambda,Proc要好好理解下,在Ruby中很重要。
arr = [1,2,3,4,5] arr.each{|item| puts item}
a_proc = Proc.new {|a, *b| b.collect {|i| i*a }} a_proc.call(9, 1, 2, 3) #=> [9, 18, 27] Proc.new新建一个Proc对象时,可以不带一个block,只是在定义Proc的方法上带一个block,这个block会变成属于Proc的。 def proc_from Proc.new end proc = proc_from { "hello" } proc.call #=> "hello" Proc对象是与局部变量绑定的一个代码块。绑定之后,代码可以在不同的上下文中调用,并可以访问局部变量。 def gen_times(factor) return Proc.new {|n| n*factor } end times3 = gen_times(3) times5 = gen_times(5) times3.call(12) #=> 36 times5.call(5) #=> 25 times3.call(times5.call(4)) #=> 60
a_lambda = lambda {|a| puts a} a_lambda.call("samsam") lambda返回的是一个Proc对象。 a_lambda.class #=>Proc lambda和Proc是一样的,除了Proc的return会跳出调用的方法,lambda则不会,它只是返回自己。 def foo f = Proc.new { return "return from foo from inside proc" } f.call # control leaves foo here return "return from foo" end def bar f = lambda { return "return from lambda" } puts f.call # control does not leave bar here prints "return from lambda" return "return from bar" end puts foo # prints "return from foo from inside proc" puts bar # prints "return from bar" 参考: http://www.artima.com/intv/closures.html http://blackanger.blog.51cto.com/140924/83700
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |