关于:
class Test class << self def hi puts "Hi there" end end
我在脑海中想出了以下图片:
由于一切都是Ruby中的对象,因此类本身就是类Class的对象.通过调用类<<自我从Test内部打开类定义并注入几个实例方法.由于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,...]
什么类<< OBJ; ... end确实是它创建了一个B类,它的唯一实例是obj,并将它放在obj的祖先层次结构中,以便obj类的祖先层次结构变为:
[B,A,...]
如果你写类<<自; ...在Test的上下文中结束,然后它的主体将是一个其唯一实例为Test的类.如果在该主体中定义实例方法hi,则该类将应用于该类的实例,即Test.因此,你将能够做Test.hi.