2014-11-03 148 views
0

我是Ruby的新手,所以请耐心等待我的问题,以防他们可能没有任何意义。我的问题是,Ruby中的ARGV:常量的意义

常量是我们分配不应该改变的值。为什么ARGV是一个常量,当我们可以传递尽可能多的参数的时候,我们想要的就是这样呢?这些论据不是ARGV的价值吗?当我们将参数传递给ARGV时,我们是分配值还是ARGV已经拥有自己的一组值?

回答

3

一个常数必须在某个时刻新分配它的值。如果你将不变的含义看作是从未新赋值的东西,那么根本就不会有任何常数。因此,常数是一个相对的概念;没有相关的领域/范围,你无法定义一个常数。在该领域内,一个常数保持一致,但其价值在范围之外分配/改变。

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

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

+0

谢谢你的回答!我现在更清楚地理解这个概念! – NikitaShrestha 2014-11-03 16:43:44

2

问题是ARGV对于程序运行的整个时间范围都有固定值。另一个原因是你不应该改变ARGV的值。从维基百科页面标题Constant (computer programming)

[...]的常数是一个标识符,其相关联的值通常不能由程序其执行期间改变[...]

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

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

p ARGV 
# [123] 
+0

谢谢你的帮助!我现在明白了一点。 – NikitaShrestha 2014-11-03 16:42:38

1

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

ARGF documentation

ARGF是在这个过程中给定为命令行参数或经由STDIN传递文件中的脚本设计用于流。

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

去除见the documentation for ARGV了解更多详情。

+0

谢谢!文档确实有帮助! – NikitaShrestha 2014-11-03 16:42:19

相关问题