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

时间:2013-05-23 02:42:19

标签: ruby oop methods new-operator

我正在研究这个片段:

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

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

2 个答案:

答案 0 :(得分:3)

Ruby中的

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

self.new(File.readlines(file_name))

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

  

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

答案 1 :(得分:1)

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