我不确定如果我将"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.new
类TestClass
的返回实例(。调用self.class
返回function2
所在的类(TestClass
(。
function2
也可以这样称呼:TestClass.function2