【问题标题】:When creating a new object in ruby, what method does it call first?在 ruby​​ 中创建新对象时,它首先调用什么方法?
【发布时间】:2017-01-20 01:50:44
【问题描述】:

当我像上面一样创建对象时,首先调用方法 initliase 吗? 在 PHP 中,我们有一个称为构造函数的东西,每当创建对象时都会先运行,如果类中有多个方法,ruby 中首先调用哪个方法呢?

谢谢。

【问题讨论】:

  • 这个 stackoveflow 网站让学习变得如此困难,没有足够的声誉来发布超过 2 个链接是什么东西。绝对垃圾网站,我只是想学习。没有足够的声誉来使用更多的关键字。如果有什么麻烦你就封禁这个用户,你就很难学了。
  • 有很多可用的书籍和教程(甚至是交互式的)。如果您不喜欢该网站或其规则,请不要在您自己的帖子中抱怨。请查看此 SO 帖子以回答您的问题 stackoverflow.com/questions/10383535/…
  • Ruby 和 PHP 一样是基于文本的。因此,您应该将代码作为文本发布。
  • @zenarthra,只需编写问题图像中包含的代码即可。只需缩进四个空格就可以了。

标签: ruby-on-rails ruby


【解决方案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 来创建class 类的新对象,然后调用该对象的initialize 方法,并将其传递args。每当使用 .new 构造对象时,最终都会调用此方法。

这是Class#new 在各种实现中的源代码:

【讨论】:

    【解决方案2】:

    每当您调用new 时,都会调用initialize 方法。

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

    例如:

    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
    

    就是这样,祝你好运!

    【讨论】:

    • 这是不准确的。 my_obj = new Example 在 Ruby 中是无效语法,它必须是 my_obj = Example.new
    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2015-02-13
    • 2020-07-03
    • 2012-10-07
    相关资源
    最近更新 更多