簡體   English   中英

ruby&:方法語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM