如果创建一个类Foo
并定义一个名为initialize
的函数和一个名为new
的函数会怎样?
稍后,如果我编码foo = Foo.new
,哪个函数将运行?由于在声明initialize
时应该调用new
函数。
编辑:
澄清:
class Foo
def new
end
end
这就是我正在谈论的事情。
答案 0 :(得分:4)
如果您在类上定义了new
,它将调用您的函数并覆盖典型的new
方法,该方法将创建该类的新实例。如果你根本不覆盖它会更好,但是你仍然可以在Ruby中使用和来实现它,因为Ruby非常好。
如果您之后仍想要该类的新实例,则可以调用Foo.allocate
来获取该实例。然后,您可以手动调用该对象上的initialize
以触发任何初始化事件。
答案 1 :(得分:2)
执行new
时不会调用手动定义的Foo.new
函数,因为手动定义的new
函数将是实例函数。 Foo.new
正在调用类函数。
class Foo
def new
puts 'new!'
123
end
def initialize
puts 'initialize'
end
end
c = Foo.new
puts c #this will print "#<Confusion:0xb75b20f4>"
c.new #this will print "new!"
编辑:
但是,如果我这样做了:
class Foo
def Foo.new
end
end
然后我们会遇到问题,正如@Ryan指出的那样。