所以,我认为我很聪明,我在Object
添加了这样的方法:
class Object
def apply_if(cond)
if cond
yield self
else
return self
end
end
end
这(我认为)允许我有条件地向方法链添加位,这简化了我的ActiveRecord查询操作。但它会产生语法错误,我可以将其缩减为以下代码:
data = [1,2,3,4,5]
results = data.
apply_if(true and false) do |q|
q + [0,0]
end
同样这个错误:
results = data.apply_if(true and false){|q| q + [0,0]}
但这有效:
results = data.apply_if ((true and false)) {|q| q + [0,0]}
同样如此:
results = data.apply_if (true && false) {|q| q + [0,0]}
我发现这些差异与运算符优先级有关,但运算符在一对括号中的优先级如何?
为什么这里会出现语法错误?我没有看到任何可能的语法歧义,这种方法在形状上与Array#reduce方法相同。
我在这里尝试了许多组合 - 带有调用的显式块参数,方法定义中的各种类型的显式优先级。使用lambda而不是块工作得很好,但显然太笨重了,不能用于我的目的。
答案 0 :(得分:5)
这与您的任何代码无关 - 参数列表中不允许使用and
运算符。至于为什么,你必须问核心团队,但IMO最明显的可能性是它的存在理由(具有极低的优先级)在参数列表中不起作用。 / p>