Class.new.new
# => #<#<Class:0x44f3a2>:0xd7244e>
我很想知道创造了什么。它是对象的对象吗?任何技术解释将不胜感激。
答案 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