所以,我认为我很聪明,我添加这样的方法Object
:
class Object
def apply_if(cond)
if cond
yield self
else
return self
end
end
end
Run Code Online (Sandbox Code Playgroud)
这(我认为)允许我有条件地向方法链添加位,这简化了我的ActiveRecord查询操作.但它给出了语法错误,我可以将其简化为以下代码:
data = [1,2,3,4,5]
results = data.
apply_if(true and false) do |q|
q + [0,0]
end
Run Code Online (Sandbox Code Playgroud)
同样这个错误:
results = data.apply_if(true and false){|q| q + [0,0]}
Run Code Online (Sandbox Code Playgroud)
但这有效:
results = data.apply_if ((true and false)) {|q| q + [0,0]}
Run Code Online (Sandbox Code Playgroud)
同样如下:
results = data.apply_if (true && false) {|q| q + [0,0]}
Run Code Online (Sandbox Code Playgroud)
我看到这些差异都与运算符优先级有关,但是如何在一对括号内的运算符的优先级很重要?
为什么这里会出现语法错误?我没有看到任何可能的语法歧义,并且这种方法在形状上与Array#reduce方法相同.
我在这里尝试了许多组合 - 带有调用的显式块参数,方法定义中的各种类型的显式优先级.使用lambda而不是块工作正常,但显然太笨重,不能用于我的目的.