[英]ruby &:method syntax
我遇到了一個錯誤,我遺漏了這樣的空間
@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,零] .ANY? 結果是真的和:零? 具有真值,因此結果是相同的,因為[1,2,nil]也包含零值,但計算是不同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.