了解ruby方法$ stdout的工作原理

Jul*_*ius 1 ruby stdout

这是一个简单的ruby脚本,它接受来自用户的输入并提供输出(是的,它将被重构).我希望这个脚本能够将输出提供给文本文件,而不是控制台窗口.这是通过简单添加完成的,$stdout = File.new('out.txt', 'w')但我认为这一行只会描述一个变量,我将在稍后使用它告诉脚本使用它将输出写入创建的文件.

我找不到有关此方法的大量文档,并想知道该程序如何知道如何将生成的输出写入该文件?

axi*_*iac 5

$stdout是一个全局变量.默认情况下,它存储IO与程序的标准输出(默认情况下为控制台)关联的类型的对象.

puts是一个Kernel模块的方法,它实际调用$stdout.send()并传递它接收的参数列表.正如文档所解释的,puts(obj, ...)相当于$stdout.puts(obj, ...).

您的代码替换$stdoutFile扩展类的类型的对象IO.创建它时,您的对象会打开out.txt要写入的文件,并且它的继承与IO它的默认行为完全兼容$stdout.

因为默认情况下,所有输出都是$stdout,所以您的新定义$stdout可确保将输出写入文件out.txt而不需要对代码进行其他更改.