gpt4 book ai didi

ruby - Ruby 中的 STDIN 和 $stdin 有什么区别?

转载 作者:数据小太阳 更新时间:2023-10-29 06:23:43 28 4
gpt4 key购买 nike

Ruby 有两种引用标准输入的方法:STDIN 常量和$stdin 全局变量。

除了我可以将不同的 IO 对象分配给 $stdin 因为它不是常量(例如,在我的 child 中 fork 重定向 IO 之前)之外,还有什么STDIN$stdin 的区别?我什么时候应该在我的代码中使用它们?

如果我重新分配 $stdin,它会影响 STDIN 吗?

这是否也适用于 STDOUT/$stdoutSTDER/$stderr

最佳答案

如果$stdin重新分配,STDIN不受影响。同样$stdin STDIN 时不受影响被重新分配(这是完全可能的(尽管毫无意义),但会产生警告)。然而,如果两个变量都没有被重新分配,它们都指向同一个 IO 对象,所以调用 reopen ¹ 一个会影响另一个。

所有内置的 ruby​​ 方法都使用 $< (又名 ARGF )读取输入。如果ARGV是空的,ARGF$stdin 读取, 所以如果你重新分配 $stdin ,这将影响所有内置方法。如果重新分配 STDIN除非某些第 3 方方法使用 STDIN,否则它将无效.

在您自己的代码中,您应该使用 $stdin与内置方法²保持一致。

¹ reopen是一种可以将 IO 对象重定向到另一个流或文件的方法。但是,您不能使用它将 IO 重定向到 StringIO,因此它不会消除重新分配 $stdin 的所有用例。 .

² 您当然也可以使用 $</ARGF与内置方法更加一致,但大多数时候您想要ARGF明确使用标准输入流时的行为。

关于ruby - Ruby 中的 STDIN 和 $stdin 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279604/

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