gpt4 book ai didi

ruby-on-rails - ruby中的继承与扩展

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:00 24 4
gpt4 key购买 nike

我一直在玩 ruby​​,对继承和混合有了一些了解。考虑以下代码:

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 中,但很明显,事实并非如此。

是否有更好的组织方式,还是我误解了 extend 的工作原理?

最佳答案

您需要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

关于ruby-on-rails - ruby中的继承与扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com