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