我遇到了一个错误,我遗漏了这样的空间
@entries = [#<Entry id: 3806, approved: false, submitted: false]
@entries.any?&:submitted? => true
@entries.any? &:submitted? => false
空间如何改变行为。 Entry.submitted? =&GT;如果数组中的所有元素都为false,则第二行具有所需的行为。
答案 0 :(得分:18)
问题在于&amp;也是一个优先的一元运算符。
执行此操作时:
@entries.any?&:submitted?
你实际上是这样做的:
(@entries.any?)&(:submitted?)
结果如此。由于@entries中的条目和符号:已提交?真值为真。
执行此操作时:
@entries.any? &:submitted?
你实际在做的是:
@entries.any?(&:submitted?)
这是你真正想要的。
@pilcrow开始工作的原因是他/她正在使用以下课程:
class Entry
def submitted?
true
end
end
要重现结果,请使用以下类:
class Entry
def submitted?
false
end
end
P.S:与@ fl00r的例子相同:
[1,2,nil].any?&:nil? and [1,2,nil].any? &:nil?
并[1,2,零]。任何?结果是真的和:零?真值为true,因此结果是相同的,因为[1,2,nil]也包含零值,但计算结果不同。