Ruby STDIN、STDOUT、STDERR 和 $stdin、$stdout、$stderr 的区别

FenRagwort · 2012年04月12日 · 最后由 xiongxin8802 回复于 2014年06月07日 · 8189 次阅读

STDIN 这一组以大写字母开头,是常量

$stdin 这一组以$开头,是全局变量

常量不可变,STDOUT 总指向屏幕显示(除非运行 ruby 时在命令行设置>out 2>err 之类)

变量可变,所以$stdin 可以替换成别的 IO/File 对象

全局的输出方法,如 print puts 等,总是向$stdout 输出,而非向 STDOUT 输出,如:

print 1 # 最开始时$stdout和STDOUT是一致的,输出到屏幕 

$stdout = open('output_file','w') # $stdout指向另一个File对象
print 2 # 这时输出到output_file了 

$stdout = STDOUT  # $stdout和STDOUT又指向同一个对象了
print 3 # 又输出到屏幕了 

STDOUT 和$stdout 有两套,并不重复,是对 Perl 的一种改进

准确地说不是输出到$stdout, 而是输出到$>. (详情看 Ri 帮助)

STDIN 和 STDOUT 不是常量,是 IO 对象的实例。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号