4

私は疑問に思っていました、、、、基本&&コアandの 変更不可能な機能(他の言語のように:php)、またはそれらはオブジェクトメソッドのようです が、魔法の方法で定義されています||or& <=>

私の思考の特徴の詳細:

[] & [10]
# => []

[].&([10])
# => []

"aaa".& 10
# NoMethodError: undefined method `&' for "aaa":String

未定義のメソッドと言うことに注意してください

...もちろんできます。

true.& false
# => false

...しかし、あなたはできません:

true.&& false
# SyntaxError:

そうする可能性があるなら

class String
  # monkey patch. If you googled this don't use this in real world, use ruby mixins insted
  def &(right_side)
    # do something meaningfull
    right_side
  end
end

"aaa".& 10
# => 10     # ta-da!

(魔法を使って)できることはありますか:

class String
  # monkey patch. If you googled this don't use this in real world, use ruby mixins insted
  def &&(right side)
    # do something meaningfull
    right side
  end
end
# => SyntaxError: (irb):13: syntax error, unexpected keyword_end

どうも

ここに画像の説明を入力

4

2 に答える 2

3

(再)定義できない演算子は次のとおりです。

  • &&, || (および、または)
  • ..、 ... (範囲)
  • ?: (三項)
  • 救援
  • = (および **=, &&=, &=, *=, +=. -=, <<=, >>= , ||=, |=, ^=)
  • 定義された?
  • いいえ
  • そして、または
  • if、unless、while、until

その他 (不完全なリスト) !、~、+、-、**、*、/、%、>>、==、!= はメソッドとして実装され、再定義できます。

于 2013-06-19T12:44:02.770 に答える
2

デビッド・A・ブラックは著書の中で次のように述べています。

[T]条件付き代入演算子||=と、めったに見られないいとこの &&= は、どちらも疑似演算子メソッドと同じ種類のショートカットを提供しますが、オーバーライドできない演算子||andに基づいています。&&

理由を説明するために、見て読んでくださいWhy can't we override|| and&&?Operator Overloading.

于 2013-06-19T12:27:28.563 に答える