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