Jai*_*ung 2 ruby ruby-on-rails
我一直在玩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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
要么
class Child < Base::Parent
include Base::Extension::Extender
def blah
puts self.bar
Run Code Online (Sandbox Code Playgroud)