为什么有$ deferred,$ default和为什么没有$ defin

时间:2009-07-27 22:41:06

标签: ruby stdio

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

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

1 个答案:

答案 0 :(得分:7)

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

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

$ 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。