我一直在玩ruby,对继承和mixin有一些了解。考虑以下代码:
module Base
class Parent
def foo
"hello parent"
end
end
module Extension
module Extender
def bar
"hello extended"
end
end
end
module Tasks
class Child < Base::Parent
extend Base::Extension::Extender
def blah
puts "blah"
puts foo
puts self.bar
end
end
end
end
Base::Tasks::Child.new().blah
blah在“ bar”处失败,声称它是未定义的。这样做的上下文是,我想使用来自Parent的方法,但是从Extender中提取一些选项和/或配置,这些选项和/或配置也可以在Parent中使用。通过此设置,我希望将bar作为类变量拉入Child,但显然不是。
有没有更好的方法来组织这种工作,还是我误解了扩展的工作原理?
您需要include
创建bar
一个实例方法,而不是extend
。使用extend
,您已经制作bar
了一个类级方法;您必须通过进行访问Child.bar
。
所以这些:
class Child < Base::Parent
extend Base::Extension::Extender
def blah
puts Child.bar
要么
class Child < Base::Parent
include Base::Extension::Extender
def blah
puts self.bar
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句