我不确定Ruby的File.open
方法是否没有正确记录,或者我遗漏了什么。
File
类继承自IO
,这似乎是open
方法的定义。据我所知,File
似乎没有覆盖IO
方法open
的实现。
documentation for File
将IO.open
类方法记录为采用数字文件描述符参数,可能是IO.sysopen
返回的对象。但是,显然没有文档的File.open
方法只会采用文件名。
例如,根据文档,这会失败并且非常正确:
IO.open('data/actors.list') do |io|
#...
end
另一方面,这有效:
File.open('data/actors.list') do |io|
#...
end
问题是,File.open
似乎覆盖IO.open
并且具有不同的界面,但没有记录 - 或者至少没有出现。
我错过了什么吗?这是怎么回事?
答案 0 :(得分:3)
我没有深入挖掘为什么 Ruby-Doc.Org以这种方式显示它(我不使用Ruby-Doc.Org),但这就是{{3不得不说:
方法:
File.open
定义于:
io.c
(File) open(filename, mode = "r"[, opt])
(File) open(filename[, mode [, perm]][, opt])
(Object) open(filename, mode = "r"[, opt]) {|file| … }
(Object) open(filename[, mode [, perm]][, opt]) {|file| … }
如果没有关联的阻止,
open
是File.new
的同义词。如果给出了可选的代码块,它将作为参数传递给文件,并且当块终止时,File
对象将自动关闭。在这种情况下,File.open
返回块的值。重载:
(File) open(filename, mode = "r"[, opt])
- 返回:
(File)
(File) open(filename[, mode [, perm]][, opt])
- 返回:
(File)
(Object) open(filename, mode = "r"[, opt]) {|file| … }
- 收益率:
(file)
- 返回:
(Object)
(Object) open(filename[, mode [, perm]][, opt]) {|file| … }
- 收益率:
(file)
- 返回:
(Object)
这匹配文件RubyDoc.Info中的RDoc注释:
/*
* Document-method: File::open
*
* call-seq:
* File.open(filename, mode="r" [, opt]) -> file
* File.open(filename [, mode [, perm]] [, opt]) -> file
* File.open(filename, mode="r" [, opt]) {|file| block } -> obj
* File.open(filename [, mode [, perm]] [, opt]) {|file| block } -> obj
*
* With no associated block, <code>open</code> is a synonym for
* <code>File.new</code>. If the optional code block is given, it will
* be passed <i>file</i> as an argument, and the File object will
* automatically be closed when the block terminates. In this instance,
* <code>File.open</code> returns the value of the block.
*/
答案 1 :(得分:1)
ruby文档错误,File.open会覆盖IO.open以接受文件名:
http://www.ruby-doc.org/docs/ProgrammingRuby/html/ref_c_file.html#File.new
和