我的程序使用此哈希工作正常
hash =
{
'keyone'=> 'valueone',
'keytwo'=> 'valuetwo',
'keythree'=> 'valuethree'
}
但是有人指出这个符号已经过时了,现在我应该使用:
hash =
{
'keyone': 'valueone',
'keytwo': 'valuetwo',
'keythree': 'valuethree'
}
我收到此错误:
no implicit conversion of nil into String (TypeError)
我只更改了哈希表示法。 有人可以解释发生了什么吗?
答案 0 :(得分:2)
在后者中,您的键被保存为符号。所以你应该把它们称为:
hash[:keyone]
如果符号很好,那就更好了
hash = {
keyone: 'valueone',
keytwo: 'valuetwo',
keythree: 'valuethree'
}
但是,如果你需要字符串键,你必须坚持使用“旧”语法
hash = {
'keyone' => 'valueone',
'keytwo' => 'valuetwo',
'keythree' => 'valuethree'
}
答案 1 :(得分:1)
我只更改了哈希表示法。
不,你没有。您还将关键对象的类型从String
更改为Symbol
s。
{ 'key': 'value' }
等同于
{ 'key' => 'value' }
等同于
{ :key => 'value' }
答案 2 :(得分:0)
new notation使用符号符号:
hash = {
keyone: 'valueone',
keytwo: 'valuetwo',
keythree: 'valuethree'
}
puts hash
# {:keyone=>"valueone", :keytwo=>"valuetwo", :keythree=>"valuethree"}
您的代码也会错过项目之间的逗号。