无法在 Opal 中的 'self.included' 挂钩中基于 object 创建变量
Can't create variable on base object in 'self.included' hook in Opal
正如问题标题所说,我在模块中包含一个钩子:
def self.included(base)
puts 'included'
base.extend API
end
我的 API 需要 object 上的某些变量才能存在,但正在创建其中的 none 个变量。
我试过:
base.variable_name = []
%x|#{base}.variable_name = []|
base.instance_variable_set(:@variable_name,[])
base.instance_exec{@variable_name = []}
- 1-2 在
base.instance_exec
内部,但使用 self
而不是 base
但其中 none 有效,控制台只是抱怨 variable_name=
不存在。
What.the.hell?
如何让变量存在于 included
钩子内的基础 object 上?
最后,我不得不在函数定义内部使用 @variable_name ||= []
来让它工作,我不喜欢它,但它确实有效。
如果你想知道为什么我不喜欢它,因为在一次地方定义对象属性意味着我可以很容易地找到它们的定义位置并更改初始值,而在这里我必须跟踪它才能更改它(不难,但这是原理)。
个人喜好吧。
正如问题标题所说,我在模块中包含一个钩子:
def self.included(base)
puts 'included'
base.extend API
end
我的 API 需要 object 上的某些变量才能存在,但正在创建其中的 none 个变量。
我试过:
base.variable_name = []
%x|#{base}.variable_name = []|
base.instance_variable_set(:@variable_name,[])
base.instance_exec{@variable_name = []}
- 1-2 在
base.instance_exec
内部,但使用self
而不是base
但其中 none 有效,控制台只是抱怨 variable_name=
不存在。
What.the.hell?
如何让变量存在于 included
钩子内的基础 object 上?
最后,我不得不在函数定义内部使用 @variable_name ||= []
来让它工作,我不喜欢它,但它确实有效。
如果你想知道为什么我不喜欢它,因为在一次地方定义对象属性意味着我可以很容易地找到它们的定义位置并更改初始值,而在这里我必须跟踪它才能更改它(不难,但这是原理)。
个人喜好吧。