Ruby:IO和ARGV有什么区别?

问题描述 投票:0回答:2

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

ruby io argv
2个回答
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类一样,Qocketxswpoi的Socket库子类(例如IOTCPSocket)。

UDPSocket是Ruby中类文件的基类。

也许你在考虑IO而不是ARGF

ARGV是一个设计用于脚本的流,用于处理作为命令行参数提供的文件或通过STDIN传入的文件。

传递给脚本的参数存储在ARGF数组中,每个元素一个参数。 ARGV假设任何非文件名的参数已从ARGF中删除。

[...]

如果ARGV为空,ARGV就好像它包含ARGF,即用你的脚本传输的数据。

所以你可以像使用IO一样使用STDIN让你说:

ARGF

$ your_script some_file

没有$ some_command | your_script 真的不得不关心它被称为哪种方式。


0
投票

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数组,其中包含传递给脚本的参数,每个元素一个。

资料来源:http://www.ruby-doc.org/core-2.1.2/IO.html

© www.soinside.com 2019 - 2024. All rights reserved.