我试图找到它是如何实现的,但是在我从https://github.com/ruby/rubyFile.open()
获得的代码中四处寻找时找不到它
问问题
188 次
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 回答