我尝试了解File.open()
是如何实现的,但是在我从https://github.com/ruby/ruby
答案 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