我正在阅读pickaxe 1.9并且作者使用lambda:
bo = lambda {|param| puts "You called me with #{param}"}
bo.call 99 => 'You called me with 99'
bo.call "cat" => 'You called me with cat'
我的问题是:除了定义执行相同操作的方法之外,这有什么更好/更差/不同?像这样:
def bo(param)
puts "You called me with #{param}"
end
bo("hello") => 'You called me with hello'
对我而言,lambda语法似乎更令人困惑和意大利面条。
答案 0 :(得分:13)
lambda表达式:
Proc
s,def
不同),我建议查看解释过程,块和lambdas的this article。
编辑:此链接已过时。如需将来参考,请尝试this article
答案 1 :(得分:3)
定义lambda的优点是,您可以将该lambda对象作为属性传递给另一个方法。
def method1 &b
#... some code
b.call
end
def method2 &b
#... some more code...
b.call
end
def method3 &b
b.call
#even more code here
end
myCallback = lambda { "this is a callback that can be called from several methods"}
然后您可以像这样使用它:
method1 &myCallback
method2 &myCallback
method3 &myCallback
而这样的美妙之处在于,你只写了一次回调代码,但却用了3次......
我建议你看一下这个link进一步阅读:)