【问题标题】:for what purpose are there $deferr, $defout and why there is no $defin$deferred、$default 的目的是什么以及为什么没有 $defin
【发布时间】:2009-07-27 22:41:05
【问题描述】:

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

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

【问题讨论】:

    标签: ruby stdio


    【解决方案1】:

    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。

    【讨论】:

    • 如果我从 ruby​​-talk 页面执行行但添加更多 ruby​​ 代码 ruby -p -i.bak -e 'STDERR.puts $stdout, $defout, $stderr, $deferr ; $_.upcase! junk,然后我看到 $stdout 等于 $defout 并且 $stderr 等于 $deferr。另外,如果我执行 ruby -e '$stdout = File.open("junk", "w");打印“输出”',然后字符串“输出”将在文件垃圾中。我可以假设最好忘记 $defout 和 $deferr 因为它们已被弃用?
    • 是的——我就是这么做的。如果有帮助,请随时接受(打勾)这个答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 2019-12-09
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多