2012-03-13 65 views
26

我正在試驗數組,並且正在閱讀Steve Holzner的書「Beginning Ruby on Rails」。我製作的節目:Array TypeError:無法將Fixnum轉換爲字符串

array = ['Hello', 'there', 1, 2] 
puts array[1] 
puts array[3] 
puts array.length 
array2 = Array.new 
puts array2.length 
array2[0] = "Banana" 
array2[1] = 6 
puts array2[0] + " " + array2[1] 
puts array3.length 

它沒有做太多,但是當我運行它,我得到的錯誤

arrays.rb:9:in `+': can't convert Fixnum into String (TypeError) 
    from arrays.rb:9 

爲什麼會出現這個錯誤?

回答

50

您不能添加字符串和整數(Fixnum),在這種情況下您嘗試將6添加到「香蕉」。

如果在第9行,你這樣做:

puts array2[0] + " " + array2[1].to_s 

你會得到:

"Banana 6" 
+2

打敗我秒。 :) – 2012-03-13 03:26:57

+1

我想在這裏添加一個錯誤是強類型語言的一個特性,其中Ruby就是一個例子。 PHP是一種弱類型語言,它會允許這種欺騙行爲。 – bernie 2012-03-13 03:30:22

+3

@bernie它更多的是Ruby類型強制規則的直接結果,而不是它的強類型。例如,Ruby中的Float + Fixnum是合法的,因爲Ruby知道如何強制一種類型到另一種類型。你實際上可以重新打開Fixnum並添加一個'coerce'方法,這個方法也會使String + Fixnum合法。 – 2012-06-14 16:58:15

4

array2[1]6,這是一個Fixnum。它不知道如何將自身添加到字符串(在這種情況下是Banana。如果你把它轉換成字符串,它會工作得很好。

puts array2[0] + " " + array2[1].to_s 
3

誤差基本上是說你不能轉換array2[1](該值是一個數字,一個類型Fixnum對象在這種情況下)爲字符串類型。你會解決這個問題的方法是將類型轉換爲字符串(這是第9行,其中錯誤發生):

puts array2[0] + " " + array2[1].to_s 

array2 [1]。 to_s將數字轉換爲字符串類型。

1

還沒有嘗試過這個自己,但嘗試

puts array2[0] + " " + array2[1].to_s 
+0

array2 [0]已經是一個字符串類型,你想轉換元素1(array2 [1]),因爲它擁有「6」 – 2012-03-13 03:29:08

+0

@Kevin Jalbert是的,我看到它。謝謝! – 2012-03-13 03:30:11

+0

沒問題,只是指出來(很高興你也抓到了它)。 – 2012-03-13 03:31:51

0

這裏更換

puts array2[0] + " " + array2[1] 

是一種方法,一個Fixnum表達式轉換成字符串,

x=2 
print (x+20).to_s + "\sbanannas" 

沒不知道你可以使用FixnNum#to_s方法來處理那些parens。

相關問題