2012-03-13 14 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

秒でビートします。 :) –

+1

私はここにエラーを投げることを追加したいと思います。強く型付けされた言語の機能です。Rubyの一例です。弱く型付けされたPHPであるPHPは、そのような攻撃を可能にします。 – bernie

+3

@bernieこれは、Rubyの型強制ルールの直接の結果であり、強い型付けではありません。たとえば、RubyのFloat + Fixnumは、Rubyがあるタイプを他のタイプに強制する方法を知っているため、合法です。実際にはFixnumを再び開き、String + Fixnumを合法化する 'coerce'メソッドを追加することもできます。 –

4

array2[1]がFixnumかで6、です。それは、この場合にBananaある文字列(に自分自身を追加する方法を知りません。あなたは、文字列に変換した場合、それはうまく動作します。

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

エラーは基本的にあなたができないと言っています変換array2[1]文字列型に(値は数、この場合はタイプFixnumかです)。あなたはこれを回避するような方法が文字列にタイプを変換することである(ここで、これはライン9のためでありますエラーが発生する):

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

配列2 [1]。 to_sは、数値をString型に変換します。

1

は、この自分自身を試してみましたが、文字列にFIXNUM式を変換する方法がある。ここ

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

array2 [0]は既にString型です。要素1(array2 [1])を "6"を保持しているように変換したいとします。 –

+0

@Kevin Jalbertありがとう! –

+0

問題はありません。ちょうどそれを指摘しています(あなたもそれをキャッチしてうれしいです)。 –

0

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

を交換してみなかったの

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

didnのこれらの括弧にFixnNum#to_sメソッドを追加することができます。

関連する問題