2014-11-03 61 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