我正在研究这个片段:
def self.from_file(file_name)
new(File.readlines(file_name))
end
此代码如何工作?它只适用于类方法吗?我知道这应该返回它所定义的类的新对象。
答案 0 :(得分:3)
new
不是运算符,它只是来自Class
的方法,所以你只是用类作为隐式接收器调用new
方法,你也可以说:
self.new(File.readlines(file_name))
如果你想明确你在做什么。就它的作用而言,它:
调用
allocate
创建 class 类的新对象,然后调用该对象的initialize
方法[...]。这是在使用.new
构造对象时最终调用的方法。
答案 1 :(得分:1)
Ruby默认情况下将没有显式接收器的消息发送到当前作用域的“self”接收器。红宝石的范围是关于什么对象代表自我。因为该方法被定义为self.method,所以该方法的范围是定义方法的类对象。因为新消息没有显式接收,所以它被发送给self,在这种情况下是包含该方法的类。