Block,lambda,Proc要好好理解下,在Ruby中很重要。
- Block块就是一个匿名函数,被调用的方法调用,在调用的方法里面通过field调用。Block主要用于迭代。
Proc对象是与局部变量绑定的一个代码块。绑定之后,代码可以在不同的上下文中调用,并可以访问局部变量。
Ruby代码 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
lambda也是匿名函数
Ruby代码 a_lambda = lambda {|a| puts a} a_lambda.call("samsam")
lambda返回的是一个Proc对象。
Ruby代码
a_lambda.class #=>Proc
lambda和Proc是一样的,除了Proc的return会跳出调用的方法,lambda则不会,它只是返回自己。
Ruby代码
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"
|
请发表评论