2012-03-11 76 views
1

在Ruby中,許多其他語言所需的但感覺冗餘的東西從語言規範中刪除。其中,一個重要的例子是分號。除非您想連續發表聲明,否則可以省略分號。有沒有逗號有時多餘?

但還有另一個字符,我通常覺得多餘,仍然需要在Ruby中。這是逗號。在某些情況下,即,當方法參數或數組元素或散列元素連續放在同一行上,還是當它們被一對括號包圍時,即使它們位於不同的行上時,逗號也不是冗餘的?爲什麼Ruby不能像shell腳本一樣使用逗號,並且只能有選擇地使用它們來指示方法參數/數組元素/散列元素繼續到下一行?如果Matz繼續做分號,爲什麼他不用逗號呢?

This question我投票結束,讓我想起了這個問題。

回答

4

沒有理由它不能

Haskell沒有方法參數的逗號,雖然它爲數組元素定界。

Smalltalk根本沒有逗號,因爲它們在Ruby-since中存在。鑑於Ruby受到Smalltalk的影響,似乎添加逗號是故意的語言選擇。 (話又說回來,Smalltalk的參數列表樣式更像是通過哈希與爭論,但仍然是逗號少。)

紅寶石,不過,確實有使用逗號少數組常量:

%w[I don't have any commas!] #=> ["I", "don't", "have", "any", "commas!"] 

最終我想問的問題是逗號是否讓事情更清晰和更易於精神分析。例如,如何明確的是:

foo bar baz 

那是foo (bar baz),或foo (bar (baz))?或者甚至可能是((foo) bar) baz)(儘管無論如何,這在非功能性語言中可能沒有多大意義)?雖然明顯知道任何優先將讓你摸不着頭腦,這也意味着你可能要更經常包括括號,而用逗號的區別是明顯的:

foo bar baz # foo(bar(baz)) 
foo bar, baz # foo(bar, baz) 

顯然離開了括號中Ruby有時也會造成歧義,但通常會導致語法錯誤,而不是依賴事物的優先順序。

最終,這是Matz等人所做的語言選擇。沒有理由不能這樣做,這正是他們認爲最有意義的原因。

+0

我明白了。這是逗號和括號之間的折衷。這似乎是這種情況。 – sawa 2012-03-11 23:33:39

+0

@sawa以我個人的口味,我寧願輸入逗號而不是括號。 – 2012-03-12 00:08:31

+0

@SonySantos但有一點要注意的是,當你有嵌套結構的時候,原則上你可以用逗號避開,並用lisp等括號完全表達,但是你不能用逗號來表達。用逗號,當你有嵌套結構時,你總是需要括號的幫助。 – sawa 2012-03-12 00:50:34