Ruby者:二重管Equals
“こんにちはいとは何なると、||=
いにrubyのコードについて教えてください。”
プログラマーとしての私の最初のブログ記事では、私はFlatiron Schoolでの最初の日に尋ねられた質問の一つを説明することが適切であると思いました。 これは私が約一ヶ月前に思いついた質問であり、rubyフォーラムとredditの投稿のウサギの穴を導いた質問です(私はあなたにトラブルを救い、この投稿の最”double-pipe equals”の背後にある論争は、演算子をどのように翻訳すべきかを中心にしていますが、私はこの記事を私が見つけたアプリケーションに集中したいと思 では、||=
=
false
ま私は実証してみましょう。
p>
a = nil
b = 4
a = b #=> 4
a #=> 4
a
nil
b
b
の値を持つaが返されることがわかりやすい。a
4
. しかし、代わりに”double-pipe equals”を使用した場合はどうなりますか?p>
a = nil
b = 4
a ||= b #=> 4
a #=> 4
この場合、同じ結果が得られます。 a
nil
false
||=
=
a
に”truthy”値が与えられている例を見てみましょう。
a = 2
b = 4
a ||= b #=> 2
a #=> 2
上記の例では、aは”double-pipe equals”を介して操作されていても元の値を保持します。 これは、||
がこのメソッドの”回路”として機能するために発生します。 Peter Cooperが説明しているように、
比較の左側が真であれば、右側をチェックする必要はありません。rubyは
a
2
||=
a
a
"apple”
a
"apple”
になった後、”double-pipe equals”はその右側に何も変数を再割り当てさせません。rubyには反復なしで配列の最初の要素を返すメソッドがありますが、変数に”truthy”値が割り当てられているかどうかを制御すると便利な場合があります。 以下は、私が見つけた私の最近のラボの1つからのコードスニペットです||=
School
roster
School
roster
例の学校をインスタンス化し、いくつかの学生を移入することができます。私の
School
roster
add_student
メソッドaname
name
name
name
name
name
name
name
iv id=agrade
"Graham”
9
||=
の魔法です。 この場合、”double-pipe equals”演算子は、成績キーがすでに追加されていることを認識し、私の
add_student
=
||=
"Jared”
"Jared”
9
。