我在理解self
关键字时遇到问题。
我了解它是如何用于区分实例方法和类方法的,但是何时从方法内部使用它呢?
类似:
def self.name
self.name = "TEXT"
end
或
def name2
self.name = "TEXT2"
end
或
class Array
def iterate!(&code)
self.each_with_index do |n, i|
self[i] = code.call(n)
end
end
end
通常,可以省略self
作为接收器,在这种情况下,通常最好这样做。但是,在某些情况下,省略self
会使代码具有其他含义。
一种情况是,如您的示例self.name = ...
,使用setter方法。 Ruby的语法在方法和变量调用之间是模棱两可的,并且当可以解释为变量或方法的内容后接=
时,将其解释为局部变量分配具有优先权。
另一种情况是您要调用方法class
。还有关键字class
,并且作为方法的解释优先于class
作为关键字。
还有另一种情况是您想使用方法[]
。此表示法还用于数组文字,并且作为方法的解释优先于数组。
在每种情况下,您都必须使表达式毫无疑问地成为方法调用。一种方法是显式写入接收器,即使它是self
。另一种方法是在该方法之后写入()
。
关于您的示例self.each_with_index ...
,可以省略self
,不建议这样做。
self
绝对与实例方法和类方法之间的区别无关。实际上,它们之间甚至没有区别,因为Ruby没有have类方法。 Ruby只有实例方法。Ruby中的self
与其他所有面向对象的语言中的self
(有时也称为this
)相同:它是对当前对象的引用。仅此而已。它实际上只是“我自己”的指针。
self
实际上在Ruby中定义了您的作用域。当您从模块切换到类,从类切换到方法等时,范围会不断变化。...