在Ruby中,'子'模块从'父'模块继承属性的正确方法是什么?似乎如果你在一个模块中定义一个属性,然后扩展该模块并将子模块混合到一个类,我应该能够从子模块访问该属性,但没有任何运气......
module A
attr_accessor :foo
end
module B
extend A
def not_worky
p "#{foo}"
end
end
class C
include B
end
class D
include A
end
irb(main):027:0* d = D.new
irb(main):028:0> d.foo=> nil
irb(main):033:0* c = C.new
irb(main):034:0> c.foo
NoMethodError: undefined method `foo' for #<C:0x553853eb>
irb(main):038:0> c.not_worky
NameError: undefined local variable or method `foo' for #<C:0x553853eb>
答案 0 :(得分:0)
答案 1 :(得分:0)
这是由于我自己对我试图做的事情的误解。如果我只使用标准包含机制,则按预期工作。一个更现实的例子......
module App
attr_accessor :log
def initialize
self.log = 'meh'
end
end
module DB
include App
def go
p log
end
end
class Foo
include DB
end
irb(main):002:0> f = Foo.new
=> #<Foo:0x7cece08c @log="meh">
irb(main):003:0> f.go
"meh"