私はRubyが初めてです。
||とはどう違い||=ますか?
>> a = 6 || 4
=> 6
>> a ||= 6
=> 6
それらは同じように聞こえます。
x ||= yx がnull または undefined または false の場合に割り当てることを意味yします。へのショートカットです。xx = y unless xRuby の短絡演算子
||では、左のオペランドが true の場合、右のオペランドは評価されません。
上記の行の簡単な例を次に示します||=。
x が未定義で n が の場合nil:
と
unless
y = 2
x = y unless x
x # => 2
n = nil
m = 2
n = m unless n
m # => 2
と
=||
y = 2
x ||= y
x # => 2
n = nil
m = 2
n ||= m
m # => 2
||=左辺の値が偽の場合にのみ、左辺の値を右辺の値に設定します。
この場合、6 と 4 の両方が真であるため、 は最初の真の値である にa = 6 || 4設定されます。a6
a ||= 6aが偽の場合にのみ 6に設定されaます。つまり、nil または false の場合です。
a = nil
a ||= 6
a ||= 4
a # => 6
||= 6 は、まだ割り当てられていない場合にのみ 6 を割り当てます。(実際、クリスが言ったように、間違っています)
a = 4 ||= 6 => 4 = 4 || 6 => 4
a ||= 6のように展開できます。
a || a = 6
aしたがって、ais notnilまたはを使用することがわかります。falseそれ以外の場合は、に値を割り当てaてその値を返します。これは、値のメモ化によく使用されます。
アップデート
||=(または等しい)演算子の真の展開を指摘してくれた最初のコメントに感謝します。私は何か新しいことを学び、それについて話しているこの興味深い投稿を見つけました. http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case
どちらの式も同じ結果a = 6 || 4をa ||= 6返しますが、違いは、||=この変数が nil または false の場合に変数に値を代入することです。