问题描述
我有一个带有两个嵌套哈希的数组(测试)。试图做的是替换第一个哈希(事物)的键值(“ idea” =>“ Hi”)。但是,当我运行程序时,它崩溃了,并且我没有收到错误消息。我尝试了一些变体,但结果相同,因此我显然错过了关键一步。
预先感谢您的帮助。
test=[thing={"idea"=>"Hi","dumb"=>"test"},thing2={"idea"=>"not sure","dumb"=>"not"}]
puts test [0]
test=[0] [thing] ["idea"]="Bye"
puts test [0]
gets
解决方法
您需要:
- 引用哈希键,
- 在哈希键和值之间使用
=>
代替=
, - 将大括号括起来,
- 在
=
中另外删除test=[0] [thing] ["idea"]
:
test = [{'thing' => { 'idea'=>'Hi','dumb' => 'test' }},{'thing2' => {'idea' => 'not sure','dumb' => 'not'}}]
puts test[0] # {"thing"=>{"idea"=>"Hi","dumb"=>"test"}}
test[0]['thing']['idea']='Bye'
puts test[0] # {"thing"=>{"idea"=>"Bye","dumb"=>"test"}}
还请注意,您发布的原始代码给我一个错误,与您观察到的相反:
test=[thing={"idea"=>"Hi","dumb"=>"test"},thing2={"idea"=>"not sure","dumb"=>"not"}]
puts test [0]
test=[0] [thing] ["idea"]="Bye" # Error: no implicit conversion of Hash into Integer (TypeError)
此错误消息应提醒您此行(或之前)发生了问题。该错误可能看起来很神秘。但是,最接近的原因是thing
之前已将thing={"idea"=>"Hi","dumb"=>"test"}
分配给哈希。并且在这一行上,解释器尝试将thing
哈希用作数组[0]
的(整数)索引,并且无法将哈希转换为整数。请注意,解释器尝试将[0] [thing] ["idea"]="Bye"
视为分配。
长话短说,请确保显示错误消息。例如,可以通过将stderr
重定向到文件或/dev/null
来隐藏它们。