2016-05-11 4 views
-1

Rubyでは、インスタンス変数を取得/設定する2つのメソッド - instance_variable_getinstance_variable_setがあります。また、いくつかのケースでは、インスタンス変数をmemoizeすることをお勧めし:動的レイジーインスタンス変数メモ

@foo ||= 'bar' 

だから私は動的なインスタンス変数名を必要とするので、私はこの2つの機能を統合しようとすると:

iv = :@foo 
instance_variable_set(iv, 'bar') unless instance_variable_get(iv) 

は私はわかりません、これを書くにはよりエレガントな方法がありますか?怠惰へ

答えて

3

は、インスタンス変数

を評価これは、これは "メモ化" で、 "遅延評価" ではありません。

これを書くにはもっとエレガントな方法がありますか?

これは、より元の式のように読み込み(と行動に実際にそれと同等です):

instance_variable_get(:@foo) || instance_variable_set(:@foo, 'bar')