我一直试图理解两者之间的差异,但截至目前,我有一个非常基本的理解。我相信ARGV是IO的一个子集。我知道ARGV在调用Ruby脚本时会返回一个数组,但IO也会做同样的事情。任何人都可以向我解释这个话题或指导我一个很好的解释吗?我搜索了多个博客,但无济于事。 谢谢!
答案 0 :(得分:3)
ARGV
是一个数组:
> ARGV.class
=> Array
此数组包含脚本的命令行参数。例如:
$ cat pancakes.rb
puts ARGV.inspect
$ ruby pancakes.rb -where is house
["-where", "is", "house"]
IO
有点不同。 IO is:
[...] Ruby中所有输入和输出的基础。 [...]
本节中的许多示例都使用
File
类,IO
的唯一标准子类。这两个班级密切相关。与File
类一样,来自IO
的Socket库子类(例如TCPSocket
或UDPSocket
)。
IO
是Ruby中类文件的基类。
也许您正在考虑ARGF
而不是ARGV
:
ARGF
是一个设计用于脚本的流,用于处理作为命令行参数提供的文件或通过STDIN传入的文件。传递给脚本的参数存储在
ARGV
数组中,每个元素一个参数。ARGF
假定已从ARGV
中删除了任何非文件名的参数。[...]
如果
ARGV
为空,则ARGF
的行为就像包含STDIN
一样,即管道传输到您的脚本。
所以你可以使用ARGF
像IO一样让你说:
$ your_script some_file
和
$ some_command | your_script
没有your_script
真的不得不关心它的调用方式。
答案 1 :(得分:0)
IO类是Ruby中所有输入和输出的基础。 I / O流可以是双工的(即双向),因此可以使用多个本机操作系统流。
本节中的许多示例都使用File类 IO的标准子类。这两个班级密切相关。喜欢 File类,来自IO的Socket库子类(如 TCPSocket或UDPSocket)。
Kernel#open方法可以为这些创建IO(或File)对象 参数类型:
普通字符串表示适合底层的文件名 操作系统。以" |"开头的字符串表示子进程。 " |"之后的字符串的其余部分被调用为进程 连接适当的输入/输出通道。字符串相等 到" | - "将创建另一个Ruby实例作为子进程。 IO可以 用不同的文件模式打开(只读,只写)和 编码以进行适当的转换。有关这些选项,请参阅:: new。看到 内核#open以了解所描述的各种命令格式的详细信息 上方。
来源:http://www.ruby-doc.org/core-2.1.2/IO.html
ARGF是一个流程,设计用于处理作为命令行参数或文件提供的文件的脚本 通过STDIN传入。
传递给脚本的参数存储在ARGV数组中 每个元素的参数。 ARGF假设任何论据都不是 文件名已从ARGV中删除。
argv→ARGV返回包含参数的ARGV数组 传递给你的脚本,每个元素一个。