动态惰性实例变量memoization

时间:2016-05-11 09:47:40

标签: ruby metaprogramming

在Ruby中,我们有两种获取/设置实例变量的方法 - instance_variable_getinstance_variable_set。在某些情况下,最好记住实例变量:

@foo ||= 'bar'

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

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

我不确定,但有更优雅的方式来写这个吗?

1 个答案:

答案 0 :(得分:3)

  

延迟评估实例变量

这不是"懒惰的评价",这是" memoization"。

  

有更优雅的方式来写这个吗?

这更像是原始表达式(实际上与行为中的等价物相同):

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