赞 | 4 |
VIP | 1 |
好人卡 | 8 |
积分 | 123 |
经验 | 21821 |
最后登录 | 2024-11-21 |
在线时间 | 21817 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 12289
- 在线时间
- 21817 小时
- 注册时间
- 2010-10-24
- 帖子
- 308
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 imsy 于 2017-9-19 02:24 编辑
可能有点无聊的问题...在游戏里大量使用了哈希表,而作为hash的主键的值……说起来有点尴尬,因为对从外部读取、重新写入的处理不善,现状是有的是符号(symbol),有的是字符串,如果把经过了写入后的哈希表给打印出来,就会是类似这样的状况:
- a = {
- :id=>0,
- :alive=>true,
- :type=>"actor",
- "id"=>"0",
- "alive"=>"false",
- "type"=>"actor"
- }
复制代码
虽然我已经尽可能的调整成统一的了,也在该加的地方加了.to_sym,之后应该能避免这个问题了,但是我又联想到另一个问题,能否通过直接覆盖定义或者alias,来修改Hash类的def [](key)方法呢?虽然下面这个写法是完全错误的,但还是借此表达一下个人想法:
- class Hash
- def [](key)
- return self[key] if self.has_key?(key)
- return self[key.to_sym] if self.has_key?(key.to_sym)
- return self[key.to_s] if self.has_key?(key.to_s)
- return nil
- end
- end
复制代码
大致就是这样,在根据key取出value前,判断哈希表中是否已经存在相应的键名。不需要考虑[]=写入和has_key?那些的问题。
我目前想到的办法只有定义一个新方法例如def get_exist_value(key)写入上面那4行内容,但是..也不想现在回过头去把所有取hash的value的地方的a[key]全给改成a.get_exist_value(key)了,所以提出了这个问题 |
|