0

我试图找到它是如何实现的,但是在我从https://github.com/ruby/rubyFile.open()获得的代码中四处寻找时找不到它

4

2 回答 2

1

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

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

于 2012-12-17T23:52:14.880 回答
0

没有File::open,它是继承自IO。所以,你需要寻找IO::open.

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

话虽如此,的实现IO::open是完全无聊的。它只是做了显而易见的事情:

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
于 2012-12-18T05:16:31.937 回答