动态惰性实例变量记忆

Dynamic lazy instance variable memoization

在 Ruby 中,我们有 2 个 get/set 实例变量的方法 - instance_variable_getinstance_variable_set。同样在某些情况下,记住实例变量是一个好习惯:

@foo ||= 'bar'

因此,我尝试将这 2 个功能结合起来,因为我需要动态实例变量名称:

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

我不确定,但是有没有更优雅的写法?

to lazy evaluate instance variables

这不是 "lazy evaluation",这是 "memoization"。

is there more elegant way to write this?

这读起来更像原始表达式(实际上在行为上等同于它):

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