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

在类定义中使用New()方法在Ruby中返回自身的新对象,ruby,oop,methods,new-operator,Ruby,Oop,Methods,New Operator,我正在研究这个片段: def self.from_file(file_name) new(File.readlines(file_name)) end 这段代码是如何工作的?它只对类方法有效吗?我知道这应该返回它在中定义的类的一个新对象。new在Ruby中不是运算符,它只是一个方法,因此您只需调用new方法,类作为隐式接收器,您还可以说: self.new(File.readlines(file_name)) 如果你想明确你在做什么。就其作用而言,它: 调用allocate创建类的类的新

我正在研究这个片段:

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

这段代码是如何工作的?它只对类方法有效吗?我知道这应该返回它在中定义的类的一个新对象。

new
在Ruby中不是运算符,它只是一个方法,因此您只需调用
new
方法,类作为隐式接收器,您还可以说:

self.new(File.readlines(file_name))
如果你想明确你在做什么。就其作用而言,它:

调用
allocate
创建类的类的新对象,然后调用该对象的
initialize
方法[…]。每当使用
.new
构造对象时,都会调用此方法


Ruby中的
new
不是一个运算符,它只是一个来自的方法,因此您只需调用
new
方法,将类作为隐式接收器,您还可以说:

self.new(File.readlines(file_name))
如果你想明确你在做什么。就其作用而言,它:

调用
allocate
创建类的类的新对象,然后调用该对象的
initialize
方法[…]。每当使用
.new
构造对象时,都会调用此方法


默认情况下,Ruby将没有显式接收器的消息发送到当前作用域为“self”的接收器。ruby中的作用域是关于对象表示自身的内容。由于该方法定义为self.method,因此该方法的作用域是定义该方法的类对象。因为新消息没有显式接收,所以它被发送到self,在本例中,self是包含该方法的类。

默认情况下,Ruby将没有显式接收器的消息发送到当前作用域的“self”接收器。ruby中的作用域是关于对象表示自身的内容。由于该方法定义为self.method,因此该方法的作用域是定义该方法的类对象。因为新消息没有显式接收,所以它被发送到self,在本例中,self是包含该方法的类。

它是
类的实例方法,而不是
基本对象的类方法
BasicObject
恰好遇到了
Class
@JörgWMittag的一个实例:对,我把我的引用弄混了,当时我正匆匆出门。这是
Class
的一个实例方法,而不是
BasicObject
的类方法
BasicObject
恰好遇到了
Class
@JörgWMittag的一个实例:对,我把我的参考资料搞混了,我正急匆匆地出门。