类“自我”是什么意思?
关于:
class Test
class << self
def hi
puts "Hi there"
end
end
我在脑海中形成了如下图像:
由于Ruby中的所有东西都是对象,所以类本身就是Class
对象。 通过调用class << self
您可以从Test
内部打开Class
定义并注入少量实例方法。 由于Test
是Class
一个实例,因此您可以像调用对象上的实例方法一样调用这些方法: Test.hi
。
以下是有助于可视化我的上一句话的伪代码:
class Class
def hi
puts “Hi there”
end
end
Test = Class.new(class Test
end)
Test.hi
我是否正确?
假设我们有一个类A
的对象obj
。 在这一点上, obj
的类的祖先层次是:
[A, ...]
什么class << obj; ... end
class << obj; ... end
意思是它创建一个只有实例为obj
的类B
,并将其放入obj
的祖先层次结构中,以便obj
类的祖先层次结构变为:
[B, A, ...]
如果你写的class << self; ... end
class << self; ... end
在Test
的上下文中class << self; ... end
,那么它的主体将是一个其唯一实例是Test
。 如果您在该体内定义了一个实例方法hi
,那么它将应用于该类的实例,即Test
。 因此,你将能够做Test.hi