【发布时间】:2016-10-12 01:52:03
【问题描述】:
我沉浸在数百万种访问 Hash 的方法中。
condition1 = {
"e" =>1
}
condition2 = {
"e":1
}
condition3 = {
:"e" =>3
}
condition4 = {
e:4
}
condition5 = { # 100% sure not working because of syntax error
e=>5
}
condition6 = { # 100% sure not working because of syntax error
:e:6
}
condition7 = {
:e=>7
}
puts condition1["e"]
puts condition2["e"]
puts condition3[:e]
puts condition4[:e]
puts condition7[:e]
输出:
1
(nothing)
3
4
7
第一个问题:对于前 2 个 puts 语句,为什么它适用于第一个而不适用于第二个?在这两个哈希中,我都使用字符串作为键。是因为我在第一个哈希中使用了“=>”,因此字符串实际上被读取为符号?所以它实际上被处理为:“e” => 1?
第二个问题:这就引出了我关于第三个条件的第二个问题,有人告诉我,如果我在引用之前使用 Symbol 符号,那么在后台发生的情况是引用将被忽略。这就是为什么我能够通过简单的 :e 访问它而不带引号。真的吗?但是,如果这是真的,那么第一个问题就会变得更加混乱。如果在第一个条件下,“e”=>1 被评估为:“e”=>1,那么引号不应该被忽略吗?因此最终它被读作:e => 1。那我怎么只能用引号来访问它呢?
第三个问题:那么如何访问第二个条件?我知道不建议使用字符串作为键值。但是,如果在某种情况下我已经用字符串创建了它,我该如何访问它呢?我尝试通过变量名访问它,但它仍然没有输出任何东西。
非常感谢您阅读本文。我知道太在意这些细节绝对不值得。但是我今天遇到了它,如果不弄清楚到底发生了什么,我就无法继续前进!
【问题讨论】: