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



我不确定如果我将"var3 = self.class.function2"替换为"var3 = self.function2",为什么我会得到NoMethodError异常

我什么时候应该使用自我

,什么时候应该使用自我.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是不能用类的实例调用的类方法。它像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.

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

因为def self.function2的意思是,function2被"连线"到类(TestClass(而不是类的实例(TestClass.newTestClass的返回实例(。调用self.class返回function2所在的类(TestClass(。

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

相关内容

最新更新