0

私が持っているとしましょう

module A
  include module B

  class C
    def methodC
      B.methodB
    end
    def self.methodD 
      somemethod
    end
  end
end

module B
  def self.methodB
    A::C.methodD
  end    
end

instance = A::C.new

このクラス レベル メソッド (self) の使用を避けるにはどうすればよいですか? 実際、どうすれば電話をかけることができmethodBますinstanceか?

4

2 に答える 2

1

私がよく理解していれば、あるメソッド内で現在のインスタンスを呼び出すためのキーワードはself. だからあなたが使うことができます

def methodC
     self.methodB
end

selfそして中を削除しますself.methodB

(ちなみに、methodDの内部を把握する必要がない限り、内部に配置してからforを削除class Cできます;))moduleBA::CmethodD

于 2013-08-13T18:56:22.097 に答える
0

これを試してください

# define moduke B first so that, it can be included in A
module B
  def methodB
    A::C.methodD
  end
end

module A

  class C
    include B # include B here  

    def methodC
      methodB
    end

    def self.methodD 
      somemethod
    end
  end
end

instance = A::C.new
p instance.methods.grep /methodB/
=> [:methodB]
于 2013-08-13T19:24:08.533 に答える