4

私はRubyが初めてです。

||とはどう違い||=ますか?

>> a = 6 || 4
=> 6
>> a ||= 6
=> 6

それらは同じように聞こえます。

4

5 に答える 5

4

x ||= yx がnull または undefined または false の場合に割り当てることを意味yします。へのショートカットです。xx = y unless x

Ruby の短絡演算子||では、左のオペランドが 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
于 2013-07-04T04:17:36.220 に答える
4

||=左辺の値が偽の場合にのみ、左辺の値を右辺の値に設定します。

この場合、6 と 4 の両方が真であるため、 は最初の真の値である にa = 6 || 4設定されます。a6

a ||= 6aが偽の場合にのみ 6に設定されaます。つまり、nil または false の場合です。

a = nil
a ||= 6
a ||= 4
a # => 6
于 2013-07-04T04:11:33.490 に答える
3

||= 6 は、まだ割り当てられていない場合にのみ 6 を割り当てます。(実際、クリスが言ったように、間違っています)

a = 4
||= 6
=> 4

= 4 || 6
=> 4
于 2013-07-04T04:11:51.213 に答える
2

a ||= 6のように展開できます。

a || a = 6

aしたがって、ais notnilまたはを使用することがわかります。falseそれ以外の場合は、に値を割り当てaてその値を返します。これは、値のメモ化によく使用されます。

アップデート

||=(または等しい)演算子の真の展開を指摘してくれた最初のコメントに感謝します。私は何か新しいことを学び、それについて話しているこの興味深い投稿を見つけました. http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case

于 2013-07-04T04:15:10.643 に答える
1

どちらの式も同じ結果a = 6 || 4a ||= 6返しますが、違いは、||=この変数が nil または false の場合に変数に値を代入することです。

于 2013-07-04T04:15:15.650 に答える