如何在Ruby中实现File.open?

时间:2012-12-17 23:35:02

标签: ruby file file-io

我尝试了解File.open()是如何实现的,但是在我从https://github.com/ruby/ruby

获取的代码中徘徊时我找不到它

2 个答案:

答案 0 :(得分:1)

File类是C模块,而不是Ruby模块。所以,你不会找到它的Ruby代码。

看起来它位于根文件夹中的file.c。该模块包含IO模块,该模块是另一个C模块,位于io.c的同一位置。查找名称以rb_file_open开头的函数。

答案 1 :(得分:0)

没有File::open,它继承自IO。因此,您需要查找IO::open

一般情况下,我建议使用Rubinius源代码。它比YARV的源代码更好地组织和记录得更好,最重要的是:它主要用Ruby编写,而在YARV中,整个语言,整个核心库和标准库的重要部分都是用C语言编写的。

话虽如此,the implementation of IO::open is completely and utterly boring。这只是显而易见的事情:

def self.open(*args)
  io = new(*args)

  return io unless block_given?

  begin
    yield io
  ensure
    begin
      io.close unless io.closed?
    rescue StandardError
      # nothing, just swallow them.
    end
  end
end