重新打开IO流与仅使用新流

在Ruby-Docs中,它提供了以下示例:

f1 = File.new("testfile") f2 = File.new("testfile") f2.readlines[0] #=> "This is line one\n" f2.reopen(f1) #=> # f2.readlines[0] #=> "This is line one\n" 

我的问题是为什么当你可以f2.closef1.readlines[0]时重新打开f2 ? 使用新流而不是仅使用新流重新打开是否有任何优势?

我曾经和IRB上的一些开发人员谈过,我得到的回应是它主要用于更改$std变量来修改putsprint输出等方法…

 $stdout.reopen(File.open('log')) puts 'hello world' 

使用它而不是……的原因

 $stdout = File.open('log') 

……虽然有点在空中。 我有一个开发人员说直接分配与ruby的一些C函数不匹配。 我对C不太了解,也不能多说这个,但他向我指出了一些最小的来源 ,看看它的一个例子。 然而,显然即使是源码已经切换到直接分配与重新开放,因为开发人员最后看了它。

总而言之……从它的外观来看, IO#reopen可能毫无用处,但我很乐意听到反对此事的争论。

更新

好的,所以我重新阅读文档,看到有第二组opts reopen

 reopen(path, mode_str) → ios 

这实际上似乎有点有用,而不是reopen(other_IO) → ios选项。