gpt4 book ai didi

带 block 的 Ruby 方法链接 - 令人困惑的不一致语法错误

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:34 24 4
gpt4 key购买 nike

所以,自以为很聪明,我向 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 方法相同。

我在这里尝试了多种组合 - 带有调用的显式 block 参数,方法定义中的各种类型的显式优先级。使用 lambda 而不是 block 工作得很好,但显然太笨重而无法用于我的目的。

最佳答案

这与您的任何代码都无关——只是参数列表中不允许使用 运算符。至于为什么,您必须询问核心团队,但 IMO 最明显的可能性是它存在的理由(具有极低的优先级)在参数列表中不起作用。

关于带 block 的 Ruby 方法链接 - 令人困惑的不一致语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7773936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com