9

Rubyでプログラミングするとき、私は次のような割り当てを頻繁に持っています

test = some_function if some_function

その割り当てで、関数の出力を割り当てたいのですが、それが返された場合nilは、変数の内容を保持したいと思います。条件付きの割り当てがあることは知っていますが、ここではどちら||=&&=使用できません。上記のステートメントを説明するために私が見つけた最短の方法は

test = (some_function or test)

これを行うためのより良い/より短い方法はありますか?

4

2 に答える 2

6

最後に示したスニペットよりも優れているものはないと思いますがor、フロー制御に使用されていることに注意してください||。代わりに次を使用してください。

test = some_function || test

通常は、新しい名前に新しい値を割り当てることをお勧めします。変数/シンボルはスコープ全体で同じ値を持つため、結果のコードは理解とデバッグが容易になります。

some_different_and_descriptive_name_here = some_function || test
于 2012-11-03T12:03:46.043 に答える
1

かっこを追加するだけです

(a = b) unless b.nil?

(a = b) if b

bが偽の場合、aは以前と同じままであるため、劣っています。

これはbを2回評価するため、bが副作用(スコープ外の変数の変更や出力など)のある関数である場合は、2回評価されることに注意してください。これを回避するには、使用する必要があります

temp = b; (a = temp) unless temp.nil?

(もちろん、分割することができます)

temp = b

(a = temp) unless temp.nil?

于 2012-11-08T01:55:14.610 に答える