0

以下代码返回错误:

class ABC
  def self.method1()
    method2
  end

  def method2
  end
end

ABC.method1

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 回答