符号在Ruby Hash中的使用问题

最近继续学习ruby, 在使用JSON的时候总是取不出对应的值. 打印变量值都是正常的, 取对应的值的时候却总是nil, 着实让我很郁闷. 最后发现是自己没有搞清楚ruby中的符号与字符串的区别. 太模糊了啊…. 这里留个记号

尝试

写一段代码看看差别:

test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
hash = {
    :foo =>  1,
    bar:     2,
    'baz' => 3,
}

p hash[:foo]       # 1
p hash['foo']      # nil

p hash[:bar]       # 2
p hash['bar']      # nil

p hash[:baz]       # nil
p hash['baz']      # 3

ruby的语法相当灵活. 由于之前看到很多对应的hash赋值都是用上面两种形式, 所以先入为主的认为这几种写法都是等价的. 好吧, 太单纯了, 还是要多尝试.

有关StringSymbol的差别推荐以下两篇文章, 总结的相当到位:

  1. http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/
  2. http://www.randomhacks.net/articles/2007/01/20/13-ways-of-looking-at-a-ruby-symbol

Comments