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/
这是一段允许你传球的代码.
它在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)
什么是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块中执行的代码不会更改用户计数.
| 归档时间: |
|
| 查看次数: |
50986 次 |
| 最近记录: |