我刚开始红宝石昨天学习,在Codeacademy“串不能强迫Fixnum对象”,同时在使用过程中的数据结构的一部分,我试过如下:红宝石:打印哈希对时
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
。 为什么?我只是打印字典键和值。我不会在其他任何东西中进行类型转换。有什么问题?
因为你的第一个散列的k,v是1 => 2,意味着k,v class是一个Fixnum,所以不能加上“:”这是一个字符串,ruby不接受这个。 我认为使用'“#{k}:#{v}”是最好的解决方案,或者您可以使用'k.to_s +“:”+ v.to_s'来代替。 –
是啊!我只是做了===>'puts k.to_s +“:”+ v.to_s' 我猜在Ruby中,'+'并不意味着串联,如果在打印语句中使用了一个数字。 –
没错!还有一件事:'to_s'是'Class'类的方法,所以每个变量都有这个函数,甚至是'nil',所以随意使用它。 –