0

次のコードはエラーを返します。

class ABC
  def self.method1()
    method2
  end

  def method2
  end
end

ABC.メソッド1

NameError: ABC:Class の未定義のローカル変数またはメソッド `method2'

ただし、以下のコードは正常に動作します。

class ABC
  def initialize
    method2
  end

  def method2
  end
end

ABC.new

クラス内のすべてのメソッドを適切に定義するために、初期化を使用する必要がありますか? 最初のコード ブロックの何が問題になっていますか?

4

3 に答える 3

3

そのクラスのオブジェクトがなければ、インスタンス メソッドを呼び出すことはできません。

method1は class のクラス メソッドであるABCため、クラス自体で呼び出すことができます。ただし、インスタンスメソッドを呼び出したい場合は、クラス自体で呼び出すのではなくmethod2、クラスのオブジェクトが必要です。ABC

o = ABC.new
o.method2

initializeでは、すでに のインスタンスがありABC、メソッド呼び出しは として理解できるため、他のコードは機能しますself.method2

于 2013-04-28T09:56:44.427 に答える
2

method1静的ではmethod2ありません。

ABC.method2未定義ABC.new.method2です、大丈夫です

class ABC

  def self.method1()
    method2    # ABC.method2
  end

  def initialize
    method2    # self.method2, self is instance of ABC
  end

  def method2
  end
end
于 2013-04-28T09:56:35.253 に答える
0

最初のコード ブロックでは、クラス メソッドでインスタンス メソッドを呼び出そうとします。ABC.method2 を呼び出すようなものですが、ABC にはそのようなメソッドがありません。

于 2013-04-28T09:57:49.650 に答える