-1

正如问题标题所说,我在模块中有一个包含的钩子:

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

然而它们都不起作用,控制台只是抱怨variable_name=不存在。

我勒个去?

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

4

1 回答 1

0

最后,我不得不使用@variable_name ||= []函数定义本身的内部来让它工作,我不喜欢它,但它可以工作。

如果您想知道我为什么不喜欢它,因为在一次位置定义对象属性意味着我可以轻松找到它们的定义位置并更改初始值,而在这里我必须跟踪它以更改它(不难但这是原则)。

我猜是个人喜好。

于 2015-08-19T13:36:04.113 回答