调用 Name.new 时会发生什么?什么新方法被称为



我只是想弄清楚当你在底部有.new时你的代码会发生什么。实施什么方法?

如果我理解你在说什么,name.rb底部的Name.new将简单地创建一个Name类的新实例。调用的方法可以是 new 类方法(如果在 Name 类中定义了方法),要么是Class类中定义的new方法。

举个例子:

class Name
  class << self
    def new
      puts "In new method in Name class"
      super
    end
  end
end

使用此类调用Name.new将导致:

in new method in Name class
=> #<Name:0x007fa3b2b34360>

正如 Jörg 在关于这个问题的评论中所述,new 方法可以调用allocateinitialize或任何其他方法,但在调用Class.new时调用的是new方法。

当你在 Ruby 中调用new一个类时,它会为你创建一个该对象的新实例,该实例使用提供给new的参数初始化。如果你来自Java世界,你可能会认为这是一个构造函数,但这是不正确的,它是新创建的对象所具有的值的初始值设定项。

new 方法调用您调用new的类的initialize。如果你还没有实现这个方法,Ruby 会在其超类中查找它。

一个非常人为的例子:

class Monkey
    def initialize(name)
        puts "Hello #{name}"
    end
end
Monkey.new("Peter")
>> Hello Peter

您的部分困惑可能是由于您没有定义名为 new 的方法。

我从你的问题中推断出你有一个名为Name的类,所以让我们把它当作给定的;在Ruby中,类是一等对象,是类Class的实例;因此,Name是类Class的实例,你可以很容易地看到new是类Class实例方法。 这已经在 Ruby 中定义过了(你当然可以覆盖它)。

当您调用 new 创建新对象(如 Name.new 中所示)时,将调用 Classnew的方法;它调用 allocate 为新对象分配空间,然后调用已分配对象的 initialize 方法,将调用new的参数(如果有)传递给它。

最新更新