2016-05-11 3 views
-1

В Ruby у нас есть 2 метода для получения/установки переменных экземпляра - instance_variable_get и instance_variable_set. Кроме того, в некоторых случаях это хорошая практика, чтобы memoize переменного экземпляра:Динамическая ленивая переменная memoization

@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') 
Смежные вопросы