Ruby的类表达式---它与`Class.new`有什么不同?

时间:2015-05-24 04:29:21

标签: ruby class syntactic-sugar

在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进行赋值,并且该块返回新类本身。但这似乎不是我添加类表达式语法的理由,所以我想我可能会遗漏一些东西。

0 个答案:

没有答案