[心得] 改變nil的行為。

看板Ruby作者 (是妳)時間13年前 (2011/06/01 18:01), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串1/1
最近在寫一個Compiler 需要一個Hash, 有以下行為: hash[:a][:a] = :a hash[:b][:b] = :b hash[:c] = :c 對其他的組合, hash[x][y] = nil 可是其實這是兩層的hash, 所以我可以說 hash[:d] = nil (by default) 可是我不能做以下設定: hash[:c][:a] = nil 或著 hash[:d][:a] = nil 因為, hash[:c] = :c, hash[:c][:a] = :c[:a], 會runtime error hash[:d] = nil, hash[:d][:a] = nil[:a], 也會runtime error. 不過,由於Ruby的特性,我可以把任意class的單一method做重新定義。 所以我做了以下的事情: class NilClass def [](*arg) return nil end end class Symbol alias :oldArrayAccss :[] def [](*args) return nil if (args[0].class == Symbol) self.oldArrayAccess(*args) end end 就達成我想要做的事情了,對於所有x: nil[x] = nil :a[:d] = nil 甚至現在我可以 hash[:a][:b][:c][:d], 也會回傳nil 只能說Ruby真是一個很好(很好惡搞)的語言呀!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.241.193.28

06/01 19:26, , 1F
感覺你也可以用 hash[[:a,:b,:c]] 和 hash[[:a]] ?
06/01 19:26, 1F

06/01 20:32, , 2F
是阿,可是我比較喜歡連續這樣使用。宣告上比較方便
06/01 20:32, 2F

06/01 20:34, , 3F
godfat 今年暑假還會去flolac嗎?
06/01 20:34, 3F

06/02 23:33, , 4F
這次是 mountain (verification) 嘛?也不是說完全沒興趣,
06/02 23:33, 4F

06/02 23:34, , 5F
不過要請假請這麼久的話,就覺得有點划不來了 @@" so...
06/02 23:34, 5F

06/02 23:34, , 6F
倒是想聽 automata 的東西... ><
06/02 23:34, 6F

06/03 03:05, , 7F
前年去過,感覺就是值域只有01的verification。
06/03 03:05, 7F

06/03 03:06, , 8F
可是templar automata和modal-logic我前年聽的滿開心的。
06/03 03:06, 8F
文章代碼(AID): #1DvWtcUD (Ruby)
文章代碼(AID): #1DvWtcUD (Ruby)