我认为以下两个是等价的:
named_scope :admin, lambda { |company_id| {:conditions => ['company_id = ?', company_id]} }
named_scope :admin, lambda do |company_id|
{:conditions => ['company_id = ?', company_id]}
end
但Ruby抱怨道:
ArgumentError: tried to create Proc object without a block
有什么想法吗?
答案 0 :(得分:76)
这是一个解析器问题。试试这个
named_scope :admin, (lambda do |company_id|
{:conditions => ['company_id = ?', company_id]}
end)
答案 1 :(得分:17)
我认为问题可能与{...}
和do...end
有一些SO讨论here
我认为将一个lambda分配给一个变量(可能是一个Proc)可以用do
... end
来完成:
my_proc = lambda do
puts "did it"
end
my_proc.call #=> did it
答案 2 :(得分:9)
如果您使用的是ruby 1.9或更高版本 1 ,则可以使用lambda文字(箭头语法),该文字具有足够高的优先级,以防止方法调用来自"窃听& #34;来自lambda的块。
named_scope :admin, ->(company_id) do
{:conditions => ['company_id = ?', company_id]}
end
1第一个稳定的Ruby 1.9.1版本是2009-01-30。
答案 3 :(得分:7)
这是我可以告诉的优先顺序
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!