本帖最后由 铃仙·优昙华院·因幡 于 2013-12-12 21:24 编辑
对 Hash 里每个的 Key 创建一个读写方法么?
class LazyHash < Hash alias orig_square [] unless defined?(orig_square) # 对 Hash 里默认的 [] 这个方法起别名 def [](*args) self[*args]= LazyHash.new if orig_square(*args).nil? # 如果原来 Hash 里的 *args 这个 Key 没东西, 那么就创建一个 LazyHash 实例给他. orig_square(*args) # 返回 Key 对应的 value 值 end def method_missing(meth,*args) # method_missing 这个方法 Ruby 会在找不到调用的方法 的时候被调用. meth 是那个方法名, args 这个是参数 if /(.+?)=$/.match(meth.to_s) # 如果调用的方法 meth 满足最后一个字符是 '=' 时 self[$1.to_sym] = *args # 创建这个 meth 对应的 值 else self[meth] # 返回 Key 对应的 value 值 end end end
class LazyHash < Hash
alias orig_square [] unless defined?(orig_square) # 对 Hash 里默认的 [] 这个方法起别名
def [](*args)
self[*args]= LazyHash.new if orig_square(*args).nil? # 如果原来 Hash 里的 *args 这个 Key 没东西, 那么就创建一个 LazyHash 实例给他.
orig_square(*args) # 返回 Key 对应的 value 值
end
def method_missing(meth,*args) # method_missing 这个方法 Ruby 会在找不到调用的方法 的时候被调用. meth 是那个方法名, args 这个是参数
if /(.+?)=$/.match(meth.to_s) # 如果调用的方法 meth 满足最后一个字符是 '=' 时
self[$1.to_sym] = *args # 创建这个 meth 对应的 值
else
self[meth] # 返回 Key 对应的 value 值
end
end
end
感觉有点点嵌套的味道. 而且有点怪怪的感觉. 最后一个赋值. |