什么时候在Ruby on Rails中使用lambda?
什么时候应该使用lambda或proc? 我曾经把他们描述为匿名function,但我很难理解这个概念。 我将不胜感激任何的链接或什么时候你可以使用Ruby的例子,但尤其是在Ruby on Rails的。
http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/有一个block / procs / lambdaexpression式,你如何使用它们,以及它们如何与其他语言的函数进行比较。 它绝对回答你的问题。
请注意,最后一节“关于lambdaexpression式的提示”提到了一个只在Ruby 1.8中正确的点,并在1.9中进行了更改–Ruby:Proc.new {'waffles'}与proc {'waffles'}
我没有看到你在Ruby on Rails和Ruby之间的区别。 如果您正在编写Ruby on Rails应用程序,那么您正在编写Ruby代码,所以如果它在Ruby中很有用,它应该在Ruby on Rails中很有用。
无论如何,这篇文章, Ruby中的一些有用的闭包 ,应该是有帮助的,以及这个: http : //www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/
这是一段代码,可以让你通过。
它在named_scope中特别有用,它允许你做这样的事情:
named_scope :scoped_by_user, lambda {|user| {:conditions=>{:user_id=>user.id}}}
假设你有一个Project模型,并且你想获得一个特定用户的所有项目,你可以这样做:
Project.scoped_by_user(123)
我见过的Lambda在testing中…
lambda do post :create, :user => @attr end.should_not change(User, :count)
Lambda允许您在最后进行该testing,以确保在lambda块中执行的代码不会更改用户计数。
什么是lambda?
试试这个你的irb 。
lam = lambda { puts "Hello world"} lam.class #output is => Proc
Ruby中的lambda也是Proc类的一个实例。 lambda是不同的味道。
什么是Proc?
Proc对象是已绑定到一组局部variables的代码块。
proc = Proc.new { puts "Hello World" } proc.call #output is => Hello World
proc和lambda有什么区别? Comparission将解释用例
Lambdas检查参数的数量,而特效不。
multiply = lambda { |x,y| x*y } multiply.call(2,3) #=>6 multiply.call(2) #ArgumentError: wrong number of arguments (1 for 2) multiply = Proc.new {|x| x*x} multiply.call(2) # =>4 multiply.call(2,3) # =>4 (It ignore the second argument)
Lambdas和procs以不同的方式处理“返回”关键字(例如,阅读下面的文章)
阅读这篇伟大的文章,了解更多细节http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/
lambda在named_scope
非常有用,因此可以将parameter passing给named_scopes
。