在Ruby中,类只是类Class
的对象。因此,我们可以通过将消息new
发送到Class
来实例化新类,如下所示:
Rat = Class.new do
def initialize(name); @name = name; end
def squeak; "#{@name} says squeak"; end
end
marshi = Rat.new 'Marshmallow'
puts marshi.squeak
我认为这完全有效,好像我用
替换了第一行class Rat
这是类表达式(根据Matz的书中的第7.1.1节)。所以看起来类表达只不过是语法糖。如果是这种情况,这个事实在哪里得到权威表达?它是在Ruby源代码中吗?文档?
如果没有,是否有任何类表达式与直接调用Class.new
的做法不同?我能够确定的是,类表达式返回最后一个表达式(这将是squeak
方法)但是使用Class.new
进行赋值,并且该块返回新类本身。但这似乎不是我添加类表达式语法的理由,所以我想我可能会遗漏一些东西。