我已经在模块中放置了一些功能,可以通过对象进行扩展。我希望功能在模块扩展时自动执行。但是,它必须在实例的上下文中执行,而不是模块。ruby:可以模块自动执行初始化代码吗?
module X
extend self
@array = [1,2,3]
end
obj.extend(X)
目前,@array没有得到的实例创建的。我不希望强迫开发人员调用某种初始化方法,因为对于每个模块,他需要知道要调用的唯一方法的名称。这可能吗 ?
我已经在模块中放置了一些功能,可以通过对象进行扩展。我希望功能在模块扩展时自动执行。但是,它必须在实例的上下文中执行,而不是模块。ruby:可以模块自动执行初始化代码吗?
module X
extend self
@array = [1,2,3]
end
obj.extend(X)
目前,@array没有得到的实例创建的。我不希望强迫开发人员调用某种初始化方法,因为对于每个模块,他需要知道要调用的唯一方法的名称。这可能吗 ?
可以使用Module#extended钩上延伸和BasicObject#instance_exec(或BasicObject#instance_eval)执行代码用于扩展对象的上下文中执行任意代码:
module X
def self.extended(obj)
obj.instance_exec { @array = [1,2,3] }
end
end
class O
attr_reader :array
end
obj = O.new
obj.array # => nil
obj.extend(X)
obj.array # => [1, 2, 3]
显示this文章
module Math
def self.extended(base)
# Initialize module.
end
end
由于两者维克多和阿维。 – rahul