何时在Ruby on Rails中使用lambda?

Cam*_*ron 47 ruby ruby-on-rails

什么时候应该使用lambda或proc?我看到他们被描述为匿名函数,但我很难理解这个概念.我将非常感谢您在Ruby中使用它们的任何链接或示例,尤其是在Ruby on Rails中.

Aug*_*aas 42

http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/对block/procs/lambdas是什么,如何使用它们以及它们如何与其他语言中的函数进行比较有所破坏.它肯定回答了你的问题.

请注意,最后一节"关于lambdas的注释"提到了一个仅在Ruby 1.8中有效且在1.9中更改的要点 - Ruby:Proc.new {'waffles'}与proc {'waffles'}


ehs*_*nul 12

我没有看到你在哪里区分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/


ez.*_*ez. 8

这是一段允许你传球的代码.

它在named_scope中特别有用,它允许你做这样的事情:

named_scope :scoped_by_user, lambda {|user| {:conditions=>{:user_id=>user.id}}}
Run Code Online (Sandbox Code Playgroud)

假设你有一个Project模型,并且想要获得一个特定用户的所有项目,你可以这样做:

Project.scoped_by_user(123)
Run Code Online (Sandbox Code Playgroud)


Mad*_*Nik 8

什么是lambda?

尝试使用你的irb.

lam = lambda { puts "Hello world"}
lam.class

#output is
=> Proc
Run Code Online (Sandbox Code Playgroud)

ruby中的lambda也是Proc类的一个实例.lambdas是一种不同的味道.

什么是Proc?

Proc对象是已绑定到一组局部变量的代码块.

proc = Proc.new { puts "Hello World" }
proc.call

#output is
=> Hello World
Run Code Online (Sandbox Code Playgroud)

proc和lambda有什么区别?Comparission将解释用例

Lambdas检查参数的数量,而proc则不检查.

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)
Run Code Online (Sandbox Code Playgroud)

Lambdas和procs对'return'关键字的处理方式不同(例如,阅读下面的文章)

阅读这篇伟大的文章了解更多详情 http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/


小智 7

我在哪里看到Lambda用于测试......

lambda do
    post :create, :user => @attr
end.should_not change(User, :count)
Run Code Online (Sandbox Code Playgroud)

Lambda允许您在最后进行该测试,以确保在lambda块中执行的代码不会更改用户计数.