Project1
标题:
HASH的一个奇怪的地方。。。
[打印本页]
作者:
神思
时间:
2009-9-13 21:23
标题:
HASH的一个奇怪的地方。。。
本帖最后由 神思 于 2009-9-13 21:30 编辑
平时声明HASH的时候通常都是
hash = {} or hash = Hash.new
这2种方法直接dump是合法的。。。
但是HASH有个指定默认值的方法..
那就是
hash = Hash.new{ |_self, key| _self[key] = "value" }
p hash[66], hash[99] # =>value
但是使用这种默认缺省方法后。。
dump会出现因为写入一个proc块而报错= =·|||||||||这可真纳闷。。。
如果有大量的地方可能初次引用这个hash的话都要
hash[key] ||= value#..........
有没什么其他的办法设置初始value
= =||除了新建子类定义[]方法。。。
作者:
紫苏
时间:
2009-9-13 22:00
hash = Hash.new("value")
作者:
神思
时间:
2009-9-13 22:04
= =这个方法我早已试过
hash = Hash.new("value")
hash[66] << "orz"
p hash[99]
她指向的value是同一个对象。。。
作者:
紫苏
时间:
2009-9-13 23:48
本帖最后由 紫苏 于 2009-9-14 11:40 编辑
这样?
hash = {}
hash.default = "value"
def hash.default(key = nil)
return key ? self[key] = "value" : super(key)
end
hash[66] << "orz"
p hash.default.id, hash[33].id, hash[66].id, hash[99].id, "",
hash.default.id, hash[33].id, hash[66].id, hash[99].id
p hash
复制代码
作者:
goahead
时间:
2009-9-14 08:59
提示:
作者被禁止或删除 内容自动屏蔽
作者:
神思
时间:
2009-9-14 11:05
能不能讲解下default这东西是啥?
作者:
紫苏
时间:
2009-9-14 11:40
本帖最后由 紫苏 于 2009-9-14 11:42 编辑
就是 hash 类的一个实例方法,本来应该是返回 Hash 对象的缺省值,也就是在 new 的时候,或者通过 default= 赋的缺省值,默认是 nil,但确实永远只会返回一个对象……
它的参数有点意思,Programming Ruby 里面关于这个方法的说明是没有参数,但实际上是一个有缺省值的参数,一般在外部通过 Hash 对象调用 default 的时候是没有传递参数的,所以仅仅是获取缺省值;而通过测试发现,如果调用 [] 的时候键不存在,就会调用并返回 default,然后把键传递给 default 的参数……而这里就是把 Hash 对象的 default 重定义为了一个单例方法,如果传递了 key 的话就生成一对键值
其实和重定义 [] 差不多,只要是单例方法就不用生成子类了 =w=
又改了一下代码,default= 放到外面比较好,没必要每次都改成另一个 "value"
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1