2013-12-13 37 views
0

我剛開始紅寶石昨天學習,在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。 爲什麼?我只是打印字典鍵和值。我不會在其他任何東西中進行類型轉換。有什麼問題?

+0

因爲你的第一個散列的k,v是1 => 2,意味着k,v class是一個Fixnum,所以不能加上「:」這是一個字符串,ruby不接受這個。 我認爲使用'「#{k}:#{v}」是最好的解決方案,或者您可以使用'k.to_s +「:」+ v.to_s'來代替。 –

+0

是啊!我只是做了===>'puts k.to_s +「:」+ v.to_s' 我猜在Ruby中,'+'並不意味着串聯,如果在打印語句中使用了一個數字。 –

+1

沒錯!還有一件事:'to_s'是'Class'類的方法,所以每個變量都有這個函數,甚至是'nil',所以隨意使用它。 –

回答

1

更正以下Chuck的評論。

這個問題確實是你沒有類型化。在第一次迭代中,您通過k1,這是一個fixnum。爲了做+1+的參數也必須是一個數字,但你給了": ",這是一個字符串。這就是你做錯了什麼。如果你想做+作爲字符串,你必須在1上做類型轉換,比如通過做1.to_s(這是"#{1}"在你的第一個版本中做的)。

+1

小小挑逗:參數可以是任何標準的數字類型。它可能是一個Fixnum,Float,Rational,BigDecimal等等。 – Chuck