Ruby on rails Rails:self.function和self.class.function之间的区别
我不太明白,如果我将“var3=self.class.function2”替换为“var3=self.function2”,为什么会出现NoMethodError异常 我什么时候应该使用self,什么时候应该使用self.classRuby on rails Rails:self.function和self.class.function之间的区别,ruby-on-rails,self,Ruby On Rails,Self,我不太明白,如果我将“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 = "wo
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
是“连接”到类(TestClass
)而不是类的实例(TestClass.new
返回类的实例TestClass
)。调用self.class
返回类(TestClass
),其中基于function2
function2
也可以这样调用:TestClass.function2
因为def self.function2
意味着,function2
是“连接”到类(TestClass
)而不是类的实例(TestClass.new
返回类的实例TestClass
)。调用self.class
返回类(TestClass
),其中基于function2
function2
也可以这样调用:TestClass.function2
def self.function2
是不能用类实例调用的类方法。它的调用类似于TestClass.function2
。而def function3
是实例方法。你说得对
myvar = TestClass.new
myvar.function3
所以,如果我们遵循流程。在function3
self下,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
是您的类方法,不能用类的实例调用。它的调用类似于TestClass.function2
。而def function3
是实例方法。你说得对
myvar = TestClass.new
myvar.function3
所以,如果我们遵循流程。在function3
self下,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.
是类方法<代码>定义函数3是一种实例方法。要调用类方法,您可以执行self.class.function2
,但通常您只需执行TestClass.function2
def self.是类方法<代码>定义函数3是一种实例方法。要调用类方法,可以执行self.class.function2
,但通常只执行TestClass.function2