class ARGF

ARGF 和 ARGV

ARGF 对象与全局变量 ARGV 中的数组配合工作,使 $stdin 和文件流在 Ruby 程序中可用。

读取

ARGF 可以从流读取,这些流在任何特定时间都由 ARGV 的内容决定。

最简单的情况

第一次 ARGF 读取发生在 ARGV 为空 ([]) 的情况下时,源是 $stdin

关于示例

此处的许多示例都假定存在文件 foo.txtbar.txt

$ cat foo.txt
Foo 0
Foo 1
$ cat bar.txt
Bar 0
Bar 1
Bar 2
Bar 3

ARGV 中的源

对于除了 最简单情况之外的任何 ARGF 读取(也就是说,除了第一次 ARGF 读取且 ARGV 为空的情况),源都可以在 ARGV 中找到。

ARGF 假定数组 ARGV 中的每个元素都是一个潜在的源,并且是以下之一:

每个不是以上之一的元素在 ARGF 访问该源之前都应从 ARGV 中删除。

在以下示例中:

示例

ARGF 的流访问从左到右考虑 ARGV 的元素。

因为 ARGV 的值是一个普通数组,所以你可以操作它来控制 ARGF 考虑哪些源。

ARGV 中的每个元素在其相应的源被访问后都会被移除;当所有源都被访问后,该数组将为空。

ARGV 中的文件路径

ARGV 数组可能包含指定 ARGF 读取源的文件路径。

此程序打印它从命令行指定路径的文件中读取的内容。

ARGV 中指定 $stdin

要在 ARGV 中指定流 $stdin,请使用字符 '-'

当没有给出字符 '-' 时,流 $stdin 将被忽略(例外:请参见 在 ARGV 中指定 $stdin)。

ARGV 中的混合和重复

对于 ARGF 读取器,ARGV 可以包含任何文件路径和字符 '-' 的混合,包括重复。

ARGV 的修改

运行中的 Ruby 程序可以对 ARGV 数组进行任何修改;ARGV 的当前值会影响 ARGF 读取。

ARGV

对于空的 ARGV,ARGF 读取方法将根据具体方法返回 nil 或引发异常。

更多读取方法

如上所示,方法 ARGF#read 将所有源的内容读取到一个字符串中。其他 ARGF 方法提供了访问这些内容的其他方式,包括:

关于 Enumerable

ARGF 包含了模块 Enumerable。Enumerable 中的几乎所有方法都会调用包含类中的 each 方法。

请注意:在 ARGF 中,方法 each 返回来自的数据,而不是来自 ARGV;因此,例如,ARGF#entries 返回一个源行的数组,而不是 ARGV 中字符串的数组。

写入

如果处于原地编辑模式,ARGF 可以写入目标流,这些流在任何特定时间都由 ARGV 的内容决定。

关于原地编辑模式的方法

写入方法