在ruby中如果我在类中定义一个名为new的函数会发生什么

时间:2013-02-04 22:10:01

标签: ruby-on-rails ruby

如果创建一个类Foo并定义一个名为initialize 的函数和一个名为new的函数会怎样?

稍后,如果我编码foo = Foo.new,哪个函数将运行?由于在声明initialize时应该调用new函数。

编辑:

澄清:

class Foo
    def new
    end
end

这就是我正在谈论的事情。

2 个答案:

答案 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指出的那样。