最近很多時(shí)間都在用Ruby,逐漸地發(fā)現(xiàn)了一件很不爽的事情,就是Ruby的end關(guān)鍵字。block多套幾層,很容易就最后一頁都是end了...難怪有人說,ruby不過是另一種acceptable Lisp,“最后一頁都是括號(hào)”的經(jīng)典標(biāo)志以另外一種形式復(fù)現(xiàn)了...對(duì)于Lisp的括號(hào),我還是可以接受的,但是滿眼的end,直接讓我回憶起10年前沖刺N(yùn)OI的種種,CPU直接切換到實(shí)模式,什么可讀啊小粒度方法全都沒有了,審美觀赤裸地變?yōu)槎绦【?..最后殺紅了眼,一行算出文法定義的所有nullable symbols...

1 while @productions.inject(false) {|c, p| c |= !nullable?(p.nonterminal) && p.symbols.all? {|s| nullable? s} && @nullables << p.nonterminal}

注意1不是行號(hào)...這句用的statement modifier, 1是我能想到的最小ruby語句了...

p.s.
我現(xiàn)在已經(jīng)恢復(fù)到OO保護(hù)模式了...剛才追求短小過了頭的同時(shí),發(fā)現(xiàn)了ruby bulid-in object的一個(gè)陷阱...
a = Array.new 5, []
[[],[],[],[],[]]
a[0] << 1
[[1],[1],[1],[1],[1]]

想不到華麗的Array直接假設(shè)傳進(jìn)去的都是值對(duì)象了,好歹您也調(diào)個(gè)dup啊...