无法在“自我”包含的基础对象上创建变量'在蛋白石中挂钩

时间:2015-08-19 12:05:31

标签: ruby variables module opalrb

问题标题是这样的,我在模块中有一个包含的钩子:

def self.included(base)
    puts 'included'
    base.extend API
end

我的API要求对象上的某些变量存在,但不会创建它们。

我试过了:

  1. base.variable_name = []
  2. %x|#{base}.variable_name = []|
  3. base.instance_variable_set(:@variable_name,[])
  4. base.instance_exec{@variable_name = []}
  5. 1-2在base.instance_exec内,但使用self代替base
  6. 然而,没有一个工作,控制台只是抱怨variable_name=不存在。

    What.the.hell?

    如何让变量存在于included钩子内的基础对象上?

1 个答案:

答案 0 :(得分:0)

最后,我不得不在函数定义中使用@variable_name ||= []来使其工作,我不喜欢它但是它有效。

如果你想知道为什么我不喜欢它,因为在一次位置定义对象属性意味着我可以很容易地找到他们定义的位置并改变初始值,而在这里我有追踪它以改变它(并不难,但它是原则)。

我猜个人喜好。