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

时间:2016-09-12 15:07:37

标签: ruby-on-rails ruby

code block

code block

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

df = pd.DataFrame.from_dict( {'a':[0,1,2],
                   'a_name':['a','b','c'],
                   'percentage':[.1,.2,.3]})

p = ggplot.ggplot(data=df,
                  aesthetics=ggplot.aes(x='a',
                                        y='percentage'))\
    + ggplot.geom_point()\
    + ggplot.scale_x_continuous(breaks=list(df['a']),
                              labels=list(df['a_name']))

文档也清楚地说明了:

  

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方法,并将其传递给 args 。这是在使用initialize构造对象时最终调用的方法。

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

答案 1 :(得分: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

就是这样,祝你好运!