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

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

4

4 回答 4

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方法实例化。

于 2013-08-27T13:15:26.477 回答
3

您可以在控制台中完成它:

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

c是一个新班级。

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

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

于 2013-08-27T13:01:09.163 回答
1

Class.new创建并返回Class实例(即类)。如果new再次调用它,之前创建的类将被实例化。

于 2013-08-27T12:59:32.303 回答
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
于 2013-08-27T13:00:40.823 回答