最近很多時間都在用Ruby,逐漸地發現了一件很不爽的事情,就是Ruby的end關鍵字。block多套幾層,很容易就最后一頁都是end了...難怪有人說,ruby不過是另一種acceptable Lisp,“最后一頁都是括號”的經典標志以另外一種形式復現了...對于Lisp的括號,我還是可以接受的,但是滿眼的end,直接讓我回憶起10年前沖刺NOI的種種,CPU直接切換到實模式,什么可讀啊小粒度方法全都沒有了,審美觀赤裸地變為短小精悍...最后殺紅了眼,一行算出文法定義的所有nullable symbols...
1 while @productions.inject(false) {|c, p| c |= !nullable?(p.nonterminal) && p.symbols.all? {|s| nullable? s} && @nullables << p.nonterminal}
注意1不是行號...這句用的statement modifier, 1是我能想到的最小ruby語句了...
p.s.
我現在已經恢復到OO保護模式了...剛才追求短小過了頭的同時,發現了ruby bulid-in object的一個陷阱...
a = Array.new 5, []
[[],[],[],[],[]]
a[0] << 1
[[1],[1],[1],[1],[1]]
想不到華麗的Array直接假設傳進去的都是值對象了,好歹您也調個dup啊...