Ruby中的ARGV:常量的意义

时间:2014-11-03 14:47:13

标签: ruby argv

我是Ruby的新手,所以如果他们没有任何意义,请提出我的问题。我的问题是,

常量是指定不应更改的值的位置。当我们能够传递尽可能多的参数时,为什么ARGV是常数?参数不是ARGV的值吗?当我们将参数传递给ARGV时,我们是在分配值还是ARGV已经拥有自己的值集?

3 个答案:

答案 0 :(得分:3)

关键是ARGV在程序运行的整个时间跨度内具有常量值。另一个原因是你不应该改变ARGV的值。来自维基百科页面标题为Constant (computer programming)

  

[...]常量是一个标识符,其关联值通常不会被程序在执行期间改变 [...]

Ruby有点特殊,因为它允许你重新分配ARGV(与任何其他常量一样),尽管它会发出警告。以下是有效的Ruby代码(但请不要这样做):

ARGV = [123]
# warning: already initialized constant ARGV

p ARGV
# [123]

答案 1 :(得分:3)

常量必须在某个时刻重新赋值。如果你将常量的含义视为永远不会重新赋值的东西,那么根本就没有常数。因此,常数是一个相对概念;如果没有相关的域/范围,您无法定义常量。常量在该域内保持一致,但其值已在范围之外分配/更改。

在数学中,假设一些数学家在他们生命中的某个时刻使用常数A = 3来解决某个问题。这并不意味着每个人从那时起使用常量A总是必须假设它的值为3。在数学中,常数的域可以是单个证明,文章,书籍或整个子域中的约定等。

对于计算机程序,常量的域通常是程序的执行寿命。常量相对于程序的执行保持不变。 ARGV在执行Ruby程序之前设置了它的值。

答案 2 :(得分:1)

ARGV是一个在Ruby脚本初始化时定义的常量数组,其中该数组中的值设置为传递给脚本本身的参数。

来自ARGF documentation

  

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

     

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

有关详细信息,请参阅the documentation for ARGV