从对象创建对象?或者我是迷惑

时间:2011-08-30 22:57:55

标签: ruby object new-operator

以下代码中发生了什么

A = Class.new

class << A
  def speak
    puts "Dave"
  end
end

A.speak
B = A.new 

这怎么可能真正发生的事情。什么是“班级”课程。

1 个答案:

答案 0 :(得分:4)

A = Class.new

这类似于:

class A
end

当您定义一个空类并将其命名为A时。 (注意:在Ruby中,惯例是以大写字母开头的标识符是常量。)

class << A
  def speak
    puts "Dave"
  end
end

类似于:

class A
  def A.speak
    puts "Dave"
  end
end

在这里,您要在A上定义一个类方法(而不是实例方法)。

该行:

A.speak

只是调用类方法。

最后:

B = A.new

正在创建一个类A的实例,并将其分配给常量B


回答你的其他问题。 Class的班级是...... Class!您可以在irb

中看到这一点
irb(main):022:0> Class.class
=> Class