代码之家  ›  专栏  ›  技术社区  ›  mko

File.open带块vs不带

  •  26
  • mko  · 技术社区  · 15 年前

    我有一个关于Block的问题,这两个代码的意思是一样的吗?

    代码1

    File::open('yozloy.txt','w') do |f|
      f << 'Some contains'
    end
    

    代码2

    newFile = File::open('yozloy.txt','w')
    newFile << 'Some contains'
    
    2 回复  |  直到 15 年前
        1
  •  27
  •   Arsen7    15 年前

    达克杜斯特已经说过,这些方法是不同的。我再给你解释几个街区,因为我想我能猜出你为什么问这个问题;-)

    ruby中的块只是某个方法的参数。这不仅仅是一种不同的语法。

    接受(可选)块的方法通常有一个条件来测试是否已使用块调用它们。

    考虑这个非常简单的示例:(例如,real File.open与之类似,但它确保即使块引发错误,也会关闭文件)

    def open(fname)
      self.do_open(fname)
      if block_given?
        yield(self) # This will 'run' the block with given parameter
        self.close
      else
        return self # This will just return some value
      end
    end
    

    一般来说,每种方法对于一个块或没有一个块都有不同的工作方式。应始终在方法文件中说明。

        2
  •  34
  •   DarkDust    15 年前

    不,他们的意思不一样。在第一个示例中,文件在处理块后自动关闭。在第二个例子中,手动调用 newFile.close .

    推荐文章