我跑到那里我留下了一个空间,这样红宝石:方法的语法
@entries = [#<Entry id: 3806, approved: false, submitted: false]
@entries.any?&:submitted? => true
@entries.any? &:submitted? => false
怎样的空间改变行为的错误。 Entry.submitted?对于数组中的所有元素,=> false,第二行有所需的行为。
我跑到那里我留下了一个空间,这样红宝石:方法的语法
@entries = [#<Entry id: 3806, approved: false, submitted: false]
@entries.any?&:submitted? => true
@entries.any? &:submitted? => false
怎样的空间改变行为的错误。 Entry.submitted?对于数组中的所有元素,=> false,第二行有所需的行为。
问题是,&也是一个优先级的一元运算符。
当你这样做:
@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
PS:同以@ fl00r为例:
[1,2,nil].any?&:nil? and [1,2,nil].any? &:nil?
[1,2,nil] .any?结果是正确的:无?具有真值的真值,所以结果是相同的,因为[1,2,nil]也包含零值,但是计算是不同的。
伟大的答案! +1 – 2011-03-09 17:34:54
啊哈!很好的答案。如果现在看起来如此明显,我是不是在挠我的脑袋呢? – 2011-03-09 17:35:46
啊,这样做更有意义!谢谢! – loosecannon 2011-03-09 17:55:01
适用于我,1.8和1.9,用一个简单的'类入口; def提交?真正的结束'。我们能否看到可能的最小代码来重现问题? – pilcrow 2011-03-09 17:23:10
1.8.7 REE在spave和无空间方面效果很好'[1,2,nil] .any?&:nil?'和'[1,2,nil] .any? &:nil?' – fl00r 2011-03-09 17:32:39