ベストアンサー1
Ruby(あるいは実際はほぼすべてのオブジェクト指向言語)の他のメソッドと同様に、
a === b
は、クラスの作成者がa
望む意味を持ちます。
しかし、同僚を混乱させたくないのであれば、慣例的===
に格包含演算子。基本的には、ブール演算子で「ラベルの付いた引き出しがある場合、その引き出しにa
入れるのは理にかなっていますか?b
「
別の表現は「a
セットを記述した場合、b
そのセットのメンバーになりますか?「
例えば:
(1..5) === 3 # => true
(1..5) === 6 # => false
Integer === 42 # => true
Integer === 'fourtytwo' # => false
/ell/ === 'Hello' # => true
/ell/ === 'Foobar' # => false
この演算子の主な用途は式===
の中でである。case
case foo
when bar
baz
when quux
flurb
else
blarf
end
(大まかに)次のように翻訳される。
_temp = foo
if bar === _temp
baz
elsif quux === _temp
flurb
else
blarf
end
この演算子を検索する場合は、通常は三重等号演算子または3等号演算子またはケース等価演算子私はこれらの名前が本当に嫌いです。なぜなら、この演算子は等号とはまったく関係がないからです。
特に、等式は対称的であることが期待されます。つまり、 がa
に等しい場合b
、b
も に等しいことが望ましいですa
。また、等式は推移的であることが期待されます。つまり、 かつ の場合a == b
、b == c
ですa == c
。実際に等式を とする方法はありませんが、保証Ruby のようなシングルディスパッチ言語では、少なくともこのプロパティを保持するように努力する必要があります (たとえば、プロトコルに従うなどcoerce
)。
しかし、===
対称性や推移性は期待されていない。実際、それは設計によるものである。ない対称的だ。だから私は、それを遠隔的に平等に似ています。だから、他の何かに名前をつけるべきだったとも思います~~~
。