Rails: self.function 和 self.class.function 的区别

Rails: difference between self.function and self.class.function

我不确定我是否理解为什么我将 "var3 = self.class.function2" 替换为 "var3 = self.function2"

时会出现 NoMethodError 异常

什么时候应该使用 self 什么时候应该使用 self.class ?

class TestClass
  var1 = nil

  def self.function1
    var1 = "hello"
  end

  def self.function2
    p self.function1
    var2 = "world"
  end

  def function3
    var3 = self.class.function2
    p var3
  end
end


myvar = TestClass.new
myvar.function3

因为 def self.function2 意味着 function2 是 "wired" 到 class (TestClass) 而不是 class 的实例(TestClass.new return class TestClass 的实例)。调用 self.class returns class (TestClass) 其中是 function2 based.

function2也可以这样称呼:TestClass.function2

def self.function2 是您的 class 方法,不能用 class 的实例调用。它的调用方式类似于 TestClass.function2。而 def function3 是实例方法。你说得对。

myvar = TestClass.new
myvar.function3

所以如果我们顺其自然。在 function3 下,self 将成为调用该函数的实例。

var3 = self.class.function2 # Here self is myvar
# self.class == TestClass
# self.class.function2 == TestClass.function2 # No error
# self.function2 == myvar.function2 # error, Calling class method with instance of class.

现在,如果您尝试使用实例调用 class 方法,它肯定会出错。