在类定义中使用的New()方法在Ruby中返回自身的新对象

问题描述 投票:0回答:2

我正在研究这个片段:

def self.from_file(file_name)
  new(File.readlines(file_name))
end

这段代码是如何工作的?它只适用于类方法吗?我知道这应该返回它定义的类的新对象。

ruby oop methods new-operator
2个回答
3
投票

Ruby中的new不是一个运算符,它只是来自Class的一个方法,所以你只是用类作为隐式接收器来调用new方法,你也可以说:

self.new(File.readlines(file_name))

如果你想明确你在做什么。就它的作用而言,它:

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


1
投票

Ruby默认情况下将没有显式接收器的消息发送到当前作用域的“self”接收器。红宝石的范围是关于什么对象代表自我。因为该方法被定义为self.method,所以该方法的范围是定义方法的类对象。因为新消息没有显式接收,所以它被发送给self,在这种情况下是包含该方法的类。

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