我跑到那裏我留下了一個空間,這樣紅寶石:方法的語法
@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