[解決済み] Rubyの"==="演算子は何をするのですか?重複] [重複
質問
重複の可能性があります。
=== Rubyにおける==と==の比較
最近何度か使われているのを見たのですが、何をするものなのかがわかりません。どなたか、どのように機能するか説明していただけませんか?
どのように解決するのですか?
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
なお、この演算子を検索する場合、通常は 三重等号演算子 または 三項演算子 または 格等号演算子 . 私はこれらの名前が本当に嫌いです。なぜなら、この演算子は等式とは全く関係がないからです。
特に、等式は対称であることが期待されます:もし
a
が
b
であるならば
b
と同じであることが望ましい。
a
. また、等号は他動的であることが期待されます。
a == b
と
b == c
であれば
a == c
. 実際に
を保証することはできません。
を保証する方法はありませんが、少なくともこの性質を維持するように努力すべきです (例えば、Ruby のような単一ディスパッチ言語では
coerce
プロトコルに従うなど)。
しかし
===
には、対称性も推移性も期待できません。実際、非常に意図的に
ではなく
対称的ではありません。ですから、私はこの製品を
というような
と呼ぶのは好きではありません。それが私が思う理由でもあります 何か別の呼び名にすべきだったと
~~~
などと呼ぶべきだったと思う理由でもあります。
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] w(array)とはどういう意味ですか?
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
-
[解決済み] Ruby: selfを拡張する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜsumはinject(:+)よりもずっと速いのですか?
-
[解決済み] Rubyでシングルクォートとダブルクォートを使い分けるとパフォーマンスが上がりますか?
-
[解決済み] Rubyの文字列の中から"˶‾‾‾˵"を削除するにはどうしたらいいですか?
-
[解決済み] Rubyの継承とミキシンの比較
-
[解決済み] Hash each ループでインデックスにアクセスすることは可能ですか?
-
[解決済み] Rubyでbeginとendのブロックを使わずにrescueを使うには?
-
[解決済み] 文字列を正規表現に変換する ruby
-
[解決済み] ルビー 負の数を正の数に変換する?
-
[解決済み] rubyのinjectはreduceと同じ意味ですか?
-
[解決済み] Ruby: selfを拡張する