Ruby中lambda和def method_name之间的区别

Jos*_*osh 8 ruby lambda function

我正在阅读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'
Run Code Online (Sandbox Code Playgroud)

我的问题是:这比仅仅定义一个做同样事情的方法更好/更差/不同?像这样:

def bo(param)
  puts "You called me with #{param}"
end

bo("hello") => 'You called me with hello'
Run Code Online (Sandbox Code Playgroud)

对我来说,lambda语法似乎更令人困惑和意大利面条.

Mat*_*ins 13

Lambda表达式:

  • Procs的变种,
  • 可以转换为/从,
  • 不要开始一个新的闭包范围(意味着你可以访问在lambda范围之外定义的变量,不像def),
  • 可以作为变量传递.

我建议查看这篇解释procs,blocks和lambdas的文章.

编辑:此链接已过时.为了将来参考,请尝试这篇文章