Class.new.new
# => #<#<Class:0x44f3a2>:0xd7244e>
我很想知道创造了什么。它是对象的对象吗?任何技术解释将不胜感激。
与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
方法实例化。
您可以在控制台中完成它:
irb(main):011:0> c = Class.new
=> #<Class:0x000000028245e0>
c
是一个新班级。
irb(main):012:0> c.new
=> #<#<Class:0x000000028245e0>:0x0000000282a170>
调用c.new
会返回您刚刚创建的新类的新实例。
Class.new
创建并返回Class
实例(即类)。如果new
再次调用它,之前创建的类将被实例化。
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