谁能给我解释一下在方法定义中添加self
是什么意思?是不是类似于java中的this
关键字?
最佳答案
与其他语言不同,Ruby 没有类方法,但它有附加到特定对象的单例方法。
cat = String.new("cat")
def cat.speak
'miaow'
end
cat.speak #=> "miaow"
cat.singleton_methods #=> ["speak"]
def cat.speak
创建附加到对象 cat 的单例方法。
当你写class A
时,它等同于A = Class.new
:
A = Class.new
def A.speak
"I'm class A"
end
A.speak #=> "I'm class A"
A.singleton_methods #=> ["speak"]
def A.speak
创建一个附加到对象 A 的单例方法。我们称它为类 A 的类方法。
当你写作时
class A
def self.c_method
'in A#c_method'
end
end
您创建了 Class
(*) 的实例。在类定义内部,Ruby 将 self 设置为 Class 的这个新实例,该实例已分配给常量 A。因此 def self.c_method
等同于 def cat.speak
,也就是说你定义了一个单例方法附加到对象 self,它当前是类 A。
现在类A有两个单例方法,我们通常称之为类方法。
A.singleton_methods
=> ["c_method", "speak"]
(*) 从技术上讲,在这种情况下,A
已经由 A = Class.new
创建,class A
重新打开现有的类。这就是为什么我们最后有两个单例方法。但在通常情况下,它是类的第一个定义,它意味着 Class.new
。
关于ruby - `def self.function` 名称是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13706373/