File.open没有正确记录或我错过了什么?

时间:2011-09-11 13:24:32

标签: ruby

我不确定Ruby的File.open方法是否没有正确记录,或者我遗漏了什么。

File类继承自IO,这似乎是open方法的定义。据我所知,File似乎没有覆盖IO方法open的实现。

documentation for FileIO.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并且具有不同的界面,但没有记录 - 或者至少没有出现。

我错过了什么吗?这是怎么回事?

2 个答案:

答案 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| … }
  •   
     

如果没有关联的阻止,openFile.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)