-1

このクラスが拡張されているクラスによって拡張されたメソッドを使用しようとしています。私がやろうとしていることの例:

class A
  def foo
    "Foobar"
  end
end

class B
  extend A
end

class C
  extend B
end

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

この種の機能が Ruby で利用できるかどうかはわかりません。inに変更extendすることでこれが可能であることはわかっていますが、 でクラス メソッドとして利用できるメソッドを.includeBABC

4

2 に答える 2

1

extendそしてincludeモジュール用です。私の知る限り、extendandでモジュールを使用することはできませんinclude(実際、Ruby はエラーを発生させます)。代わりに、A をモジュールとして定義し、次にextendB と C を Aで定義する必要があります。この設計パターンをより適切に処理するには、John Nunemaker の RailsTips に関する記事extend参照してください。include

これを行う別のオプションは、次のように、B と C が A から継承するようにすることです。

class A
  def self.foo
    "Foobar"
  end
end
class B < A; end
class C < B; end
于 2013-03-04T02:31:20.933 に答える
1
class A
  def self.foo
    "Foobar"
  end
end

class B < A
end

class C < B
end
于 2013-03-04T02:31:49.140 に答える