类“自我”是什么意思?
关于:
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
