"T-6ren">
gpt4 book ai didi

ruby - 重新打开 IO Stream 与仅使用新的 Stream

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:11 24 4
gpt4 key购买 nike

在 Ruby-Docs 中,它给出了以下示例:

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

我的问题是,当您可以只使用 f2.closef1.readlines[0] 时,为什么要重新打开 f2?使用新流重新打开与仅使用新流相比有什么优势吗?

最佳答案

前段时间我和 IRB 上的一些开发人员谈过,我得到的回应是它主要用于更改 $std 变量以修改 where 方法,例如 putsprint 输出到...

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

使用这个而不是...的原因

$stdout = File.open('log')

...虽然有点悬而未决。我有一位开发人员说直接赋值不能很好地处理某些 ruby​​ 的 C 函数。我对 C 不太了解,对此也不能说太多,但他向我指出了一些 minitest source查看它的使用示例。然而,自从开发人员上次查看它以来,显然即使是源代码也已切换为直接分配而不是重新打开。

总而言之...从外观上看,IO#reopen 可能毫无用处,但我很乐意听到反对意见。

更新

好的,所以我重新阅读了文档,发现有第二组reopen 选项:

reopen(path, mode_str) → ios

reopen(other_IO) → ios 选项相比,这实际上似乎有些用处。

关于ruby - 重新打开 IO Stream 与仅使用新的 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com