Array TypeError:无法将Fixnum转换为String

Bil*_*ljk 27 ruby arrays

我正在尝试使用数组,并正在阅读Steve Holzner撰写的"Begin on Ruby on Rails"一书.我做了这个程序:

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
Run Code Online (Sandbox Code Playgroud)

它没有做太多,但是当我运行它时,我得到了错误

arrays.rb:9:in `+': can't convert Fixnum into String (TypeError)
    from arrays.rb:9
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误?

JP *_*shy 51

你不能添加一个字符串和一个整数(Fixnum),在这种情况下你试图添加6到"香蕉".

如果在第9行你做了这个:

puts array2[0] + " " + array2[1].to_s
Run Code Online (Sandbox Code Playgroud)

你会得到:

"Banana 6"
Run Code Online (Sandbox Code Playgroud)

  • @bernie这更多是Ruby类型强制规则的直接结果,而不是强类型.例如,Ruby中的Float + Fixnum是合法的,因为Ruby知道如何将一种类型强制转换为另一种类型.你实际上可以重新打开Fixnum并添加一个`coerce`方法,它也可以使String + Fixnum合法化. (3认同)
  • 秒钟打败我.:) (2认同)