我昨天刚开始在Codeacademy学习Ruby,而在课程的Data Structures部分,我尝试了以下内容:
my_hash = {1=>2,3=>4,"5"=>"6"}
my_hash[7] = my_hash[1]+my_hash[3]
my_hash.each { |k,v|
# Here I want to print key and values like "Key: Value"
}
第4行,
这有效:
puts "#{k}: #{v}"
这不是:
puts k+": "+v
我得到String can't be coerced into Fixnum
。
为什么?我只是打印字典键和值。我不会将任何其他东西拼凑成任何东西。有什么问题?
答案 0 :(得分:1)
更正了Chuck的评论。
问题确实是你没有进行类型转换。在第一次迭代中,您传递k
值1
,这是一个fixnum。要在+
上执行1
,+
的参数也必须是数字,但是您提供了": "
,这是一个字符串。这就是你做错了。如果您想以+
作为字符串,则必须在1
上进行类型转换,例如执行1.to_s
(这是"#{1}"
在您的第一个版本中执行的操作)。