Ruby:打印哈希对时,“字符串不能被强制转换为Fixnum”

时间:2013-12-13 05:56:44

标签: ruby

我昨天刚开始在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。 为什么?我只是打印字典键和值。我不会将任何其他东西拼凑成任何东西。有什么问题?

1 个答案:

答案 0 :(得分:1)

更正了Chuck的评论。

问题确实是你没有进行类型转换。在第一次迭代中,您传递k1,这是一个fixnum。要在+上执行1+的参数也必须是数字,但是您提供了": ",这是一个字符串。这就是你做错了。如果您想以+作为字符串,则必须在1上进行类型转换,例如执行1.to_s(这是"#{1}"在您的第一个版本中执行的操作)。