1

为什么有 $deferr、$defout 以及为什么没有 $defin 如果有 $stderr、$stdout 和 $stdin,还有 STDIN、STDOUT 和 STDERR

改变其中任何一个都不会改变其他人

4

1 回答 1

6

STDIN、STDOUT 和 STDERR 是全局流常量(即默认值)。

$stdin、$stdout 和 $stderr 是初始化为流常量值的全局变量。这允许您在运行时更改它们的值(例如,将标准输出更改为替代输出设备)。

$defout 是一种创建“就地”输出流的方法。这里有一个关于 ruby​​ 邮件列表的简短讨论:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/67822

显然你不能有一个就地输入流,所以没有'$defin'。

但是,这主要是出于历史兴趣;我相信 $defout 和 $deferr 在不久前随着 Ruby 1.8.2 的发布而被弃用,当前的最佳实践是仅使用 $stdin、$stdout 和 $stderr。

于 2009-07-27T23:12:44.200 回答