重新打开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.close
和f1.readlines[0]
时重新打开f2
? 使用新流而不是仅使用新流重新打开是否有任何优势?
我曾经和IRB上的一些开发人员谈过,我得到的回应是它主要用于更改$std
变量来修改puts
和print
输出等方法…
$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
选项。