Ruby中$stdout和STDOUT的区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

在Ruby中,$stdout(之前是$)和STDOUT(全部大写)之间有什么区别?

提问于
用户回答回答于

$stdout是代表当前标准输出的全局变量STDOUT是代表标准输出的常量,通常是默认值$stdout

随着STDOUT是恒定的,不应该重新定义它,但是,你可以重新定义$stdout没有错误/警告(重新定义STDOUT将引发警告)。例如,可以这样:

$stdout = STDERR

这同样适用于$stderrSTDERR

因此,要回答问题的其他部分,请使用全局变量重定向输出,而不是常量。只需要小心地在代码中进一步修改它,重新定义全局变量会影响应用程序的其他部分。

用户回答回答于
  • STDOUT 是一个global常数,所以不应该改变。
  • $stdout 是一个预定义变量,因此可以更改。

如果你使用shell来做重定向:

$ ruby test.rb > test.log

那么在脚本执行之前,使用哪一个作为脚本的文件描述符并不重要。

但是,如果尝试从Ruby脚本中更改操作系统STDOUT的文件描述符,例如根据当前的一周当天将输出发送到一组旋转的日志文件,那么需要确保你使用$stdout

扫码关注云+社区