2016-04-17 115 views
2

許多語言有幾個規則一樣,其語法如下,其中禁止尾隨逗號:可選尾隨逗號的缺點是什麼?

call-expr: ident '(' expr-list? ')'; 
expr-list: expr | expr-list ',' expr; 

但是,下面的配方允許(但不要求)尾隨逗號,其中有well-known advantages

call-expr: ident '(' expr-list? expr? ')'; 
expr-list: expr ',' | expr-list expr ','; 

有沒有的缺點總是使用這個,至少在內部?

+0

Perl允許尾隨逗號。 – Laurel

+0

是的,我知道很多語言都會允許它。 – o11c

+0

如果你不知道那種語言,那麼你不會知道這件事。 – Laurel

回答

1

缺點是允許空項的模糊。考慮在Javascript以下陣列:

  • [1,,3]
  • [1,,3,]

他們是相同的?他們的長度是否相同?它應該是? (答案是肯定的,但不是在IE中< = 7)

1

允許程序參數被忽略的語言(我特別想到舊的HP系統語言SPL;可能有其他語言)會因此失敗,因爲編譯器會假定過程不調用尾隨逗號後有一個跳過的參數。我會承認這是一個小小的缺點 - 另一方面,海事組織所述的利益同樣微不足道。