Gav*_*Gav 52 ruby lambda ruby-on-rails
我认为以下两个是等价的:
named_scope :admin, lambda { |company_id| {:conditions => ['company_id = ?', company_id]} }
named_scope :admin, lambda do |company_id|
{:conditions => ['company_id = ?', company_id]}
end
Run Code Online (Sandbox Code Playgroud)
但Ruby抱怨道:
ArgumentError: tried to create Proc object without a block
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Mar*_*llo 76
这是一个解析器问题.试试这个
named_scope :admin, (lambda do |company_id|
{:conditions => ['company_id = ?', company_id]}
end)
Run Code Online (Sandbox Code Playgroud)
Mik*_*use 17
我认为问题可能与{...}和之间的优先级差异有关do...end
这里也有一些SO讨论这里
我认为将一个lambda分配给一个变量(可能是一个Proc)可以通过以下方式完成do
... end:
my_proc = lambda do
puts "did it"
end
my_proc.call #=> did it
Run Code Online (Sandbox Code Playgroud)
如果您使用的是ruby 1.9或更高版本1,则可以使用lambda文字(箭头语法),它具有足够高的优先级,以防止方法调用从lambda"窃取"块.
named_scope :admin, ->(company_id) do
{:conditions => ['company_id = ?', company_id]}
end
Run Code Online (Sandbox Code Playgroud)
1第一个稳定的Ruby 1.9.1版本是2009-01-30.
正如我所知,它与优先权有关
1.upto 3 do # No parentheses, block delimited with do/end
|x| puts x
end
1.upto 3 {|x| puts x } # Syntax Error: trying to pass a block to 3!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20133 次 |
| 最近记录: |