什么是Class.new.new创建的

时间:2013-08-27 12:57:25

标签: ruby

Class.new.new
# => #<#<Class:0x44f3a2>:0xd7244e>

我很想知道创造了什么。它是对象的对象吗?任何技术解释将不胜感激。

4 个答案:

答案 0 :(得分:6)

使用Class.new您正在创建一个新类。实际上,您不仅可以通过通用语法创建类:

class Bird
    def is
        "word"
    end
end

但您也可以像这样使用Class::new

Bird = Class.new do
    def is
        "word"
    end
end

在上面的示例中,您可以运行Bird.new.is,它将返回"word",就像在第一个示例中一样。 创建可以随意重命名的匿名类或类很有用。 在你的情况下:

Class.new.new

只需调用Class.new即可创建一个没有自定义方法或实例变量的新匿名类,然后通过第二个new方法实例化。

答案 1 :(得分:3)

您可以在控制台中进行操作:

irb(main):011:0> c = Class.new
=> #<Class:0x000000028245e0>

c是一个新类。

irb(main):012:0> c.new
=> #<#<Class:0x000000028245e0>:0x0000000282a170>

调用c.new会返回刚刚创建的新类的新实例。

答案 2 :(得分:1)

Class.new创建并返回Class实例(这是类)。如果再次调用new,则会实例化先前创建的类。

答案 3 :(得分:0)

my_class = Class.new # makes a new class which is a subclass of Object
my_instance = my_class.new # makes a new instance object of the class