红宝石的继承与延伸

梁咏琪

我一直在玩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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章