在ruby中创建一个新对象时,它首先调用哪种方法?

问题描述 投票:-4回答:2

当我在上面创建对象时,是否首先调用initliase方法?在PHP中,我们有一个叫做构造函数的东西,每当创建一个对象时都先运行,如果类中有多个方法,在ruby中首先调用哪个方法怎么办?

谢谢。

ruby-on-rails ruby
2个回答
1
投票

与任何其他方法一样,Class#new只是一种常规方法。它看起来有点像这样,虽然在大多数实现中它实际上不是用Ruby编写的:

class Class
  def new(*args, &block)
    new_obj = allocate

    new_obj.initialize(*args, &block)
    # actually, `initialize` is private, so it's more like this instead:
    # new_obj.__send__(:initialize, *args, &block)

    return new_obj
  end
end

文档也清楚地说:

new(args, …)obj

调用allocate创建类的类的新对象,然后调用该对象的initialize方法,传递它args。这是在使用.new构造对象时最终调用的方法。

以下是各种实现中Class#new的源代码:


0
投票

每次调用initialize时都会调用new方法。

应该在代码中调用该类中声明的任何其他方法。

例如:

class Example
  def initialize
    #some initialization code here
    puts "initialize method has just been called"
  end

  def foo
    #some foo code
    puts "this is the foo method"
  end 
end 

然后,在你的代码中:

my_obj = Example.new #initialize method will be called here

my_obj.foo #now the foo method will be called

这就是它,祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.