我正在学习Ruby 1.9编程语言,他们抛出了STDERR.在书中的早期将其放入一段代码中,但没有解释他们为什么要使用它,或者它与puts有什么不同.

我在谷歌上搜索过这个词,并在维基百科上进行了编辑,但我从研究中收集到的信息是,它与诊断学有关.在编程Ruby提供的代码中,似乎没有任何地方与错误异常处理有关.

这是密码.

require_relative 'csv_reader'
reader = CsvReader.new
ARGV.each do |csv_file_name|
  STDERR.puts "Processing #{csv_file_name}"
  reader.read_in_csv_data(csv_file_name)
end

我确实设法在某个地方读到了那本书.puts用于错误处理,但我想我是在问它的行为是否与puts不同.

推荐答案

默认情况下,puts次写入标准输出.通过指定STDERR.puts,您将输出发送到STDERR句柄.尽管实现行为是相同的,但使用STDERR而不是STDOUT肯定会影响程序的使用者,因为按照惯例,他们将试图从STDOUT捕获程序的输出.最佳实践是将调试信息、错误、警告、状态等记录到STDERR,并将实际程序输出记录到STDOUT.

Ruby相关问答推荐

在Glade创建的UI中以编程方式填充GtkTreeView

如何查询哪些RuboCop规则适用于文件?

Ruby 的 .() 运算符是如何工作的?

为什么 Rake 不能连续调用多个任务?

为什么 slurping文件不是一个好习惯?

在ruby中反转数组的顺序

有没有比 Rspec 的 `should_receive` 更少干扰的替代方法?

用mustache迭代数组

迭代一个数组,一次 n 项

Ruby 被空格分割

使用 for each 时识别最后一个循环

覆盖子类中的 ruby​​ 常量,以便继承的方法使用新常量而不是旧常量?

在 OSX 10.10 Yosemite 上安装 Nokogiri

如何在数组中找到出现次数最多的项目

创建一个接受参数散列的 ruby​​ 方法

哪个键/值存储最有前途/最稳定?

为什么在 ruby​​ 中动态创建大量符号不是一个好主意(对于 2.2 之前的版本)?

Integer 和 Fixnum 有什么区别?

如何在 Mac OS Sierra 10.12 上安装 Nokogiri

为什么 Ruby setter 需要self .班级内的资格?