Ruby:IO和ARGV之间的区别是什么?

时间:2014-07-26 05:43:29

标签: ruby io argv

我一直试图理解两者之间的差异,但截至目前,我有一个非常基本的理解。我相信ARGV是IO的一个子集。我知道ARGV在调用Ruby脚本时会返回一个数组,但IO也会做同样的事情。任何人都可以向我解释这个话题或指导我一个很好的解释吗?我搜索了多个博客,但无济于事。 谢谢!

2 个答案:

答案 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库子类(例如TCPSocketUDPSocket)。

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数组   传递给你的脚本,每个元素一个。

来源:http://www.ruby-doc.org/core-2.1.2/ARGF.html