使用二级扩展类的方法

时间:2013-03-04 02:23:15

标签: ruby inheritance mixins class-method

我正在尝试使用由此类扩展的类扩展的方法。我正在尝试做的一个例子:

class A
  def foo
    "Foobar"
  end
end

class B
  extend A
end

class C
  extend B
end

B.foo #=> "Foobar"
C.foo #=> "Foobar"

我不确定Ruby中是否提供此类功能。我知道可以通过将extend更改为include中的B来实现这一点,但我希望A中可用的方法作为B中的类方法以及C

2 个答案:

答案 0 :(得分:1)

extendinclude用于模块;据我所知,你不能使用extendinclude的模块(实际上Ruby会引发错误)。相反,您应该将A定义为模块,然后将extend B和C定义为A.请参阅extendinclude上的John Nunemaker's RailsTips write-up以更好地处理此设计模式。< / p>

另一个选择是让B和C继承自A,如下所示:

class A
  def self.foo
    "Foobar"
  end
end
class B < A; end
class C < B; end

答案 1 :(得分:1)

class A
  def self.foo
    "Foobar"
  end
end

class B < A
end

class C < B
end