ruby - $defer、$default 的目的是什么,为什么没有 $defined

标签 ruby stdio

有$deferr, $defout 的目的是什么?如果有$stderr, $stdout 和$stdin 还有STDIN, STDOUT 和STDERR 为什么没有$defin

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

最佳答案

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

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

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

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

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

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

关于ruby - $defer、$default 的目的是什么,为什么没有 $defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1191052/

相关文章:

html - 如何使用 Rails 在文本区域内显示 HTML

ruby - 与 ARGF#set_encoding 的混淆

ruby-on-rails - 在 Rails 中创建一个管理目录

html - Rails/Carrierwave 缩略图调整大小无法正常工作

c - 对文本文件中的整数进行计数和求和时遇到问题

彩色终端输出不复位

ruby-on-rails - Ruby(或 Rails)类型安全 "try"- 等效

c - fwrite() 如果任何单个字节的符号位为 1,则将全 1 写入更高有效位(写入 int)

c - 如何检测是否包含 stdio.h?

c++ - 如何拦截 C++ 代码中的 printf()?