[心得] 改變nil的行為。
最近在寫一個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
06/01 19:26, 1F
→
06/01 20:32, , 2F
06/01 20:32, 2F
→
06/01 20:34, , 3F
06/01 20:34, 3F
推
06/02 23:33, , 4F
06/02 23:33, 4F
→
06/02 23:34, , 5F
06/02 23:34, 5F
→
06/02 23:34, , 6F
06/02 23:34, 6F
→
06/03 03:05, , 7F
06/03 03:05, 7F
→
06/03 03:06, , 8F
06/03 03:06, 8F
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章