Ruby Ruby 1.9 的新 Hash 语法

iwinux · 2012年02月12日 · 最后由 sunuslee 回复于 2012年03月01日 · 7242 次阅读
ruby-1.9.3-p0 :001 > { a: 1, b: 2 }
 => {:a=>1, :b=>2} 
ruby-1.9.3-p0 :002 > { 'a': 1, 'b': 2 }
SyntaxError: (irb):2: syntax error, unexpected ':', expecting tASSOC
{ 'a': 1, 'b': 2 }
      ^
    from /home/winus/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
ruby-1.9.3-p0 :003 > { 'a' => 1, 'b' => 2 }
 => {"a"=>1, "b"=>2} 

Ruby 1.9 的新 Hash 语法只有当 key 是 Symbol 的时候才能用,感觉这样反而多了很多语法风格不统一的地方(有些地方必需用 String 做 key)……有人用么?

https://github.com/saberma/shopqi 这个项目中,都是这种用法。如果你需要写的 Hash 比较多,这种写法只需要在输入冒号的时候把手挪开,省时省力。而且,用 Symbol 来做 key 应该能满足大部分情况了。

我用新的,而且喜欢把以前的旧写法都发过来。新的更短,更易理解。

新的看着各种不习惯啊。。

#3 楼 @ywencn 只是不习惯而已,就像穿鞋一样,新鞋通常都没有旧鞋合脚,穿穿就好了

果断还是用旧的

#2 楼 @camel 那就不可避免地要跟旧式的混在一起啊……

#6 楼 @iwinux 其实问题不大

匿名 #8 2012年02月12日

新语法看起来像 json

key 和 value 都是 symbol 时,就变成了这样:{ key: :value },跟 { key: 1 } 比起来稍显怪异。

#2 楼 @camel 看来兄弟也是用 qq 五笔的。

Python 和 JSON 中都是用冒号的。

#10 楼 @hhuai 牛 B,这也看出来了。哈哈

新手对新语法表示更容易接受。

我对这句话很感兴趣——“有些地方必需用 String 做 key”,有例子么? BTW:这里的“必需”用错了,应该是“必须”

#10 楼 @hhuai 我也用 QQ 五笔,可惜的是目前 MAC 下还没有一款非常好用的五笔输入法!

我今天刚学到这个 hash 感觉还是不习惯有时候,如果想用这种语法的话{key: value} 如果 key 是数字就不行了..只有在 key 前面加个统一的前缀-。-

需要 登录 后方可回复, 如果你还没有账号请 注册新账号