我已經在模塊中放置了一些功能,可以通過對象進行擴展。我希望功能在模塊擴展時自動執行。但是,它必須在實例的上下文中執行,而不是模塊。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