1

在 ruby​​ 中,我尝试在运算符' []'中将字符串转换为 Int 但失败了。这是代码(我的输入是14 45):

STDIN.gets.split(/\s+/).each do |str|
    book = tags[str.to_i]     # book is just a new variable.  tags is an array 
end

红宝石将因错误而停止: in '[]': no implicit conversion of String into Integer (TypeError)

所以我将我的代码更改为以下(这个效果很好。):

STDIN.gets.split(/\s+/).each do |str|
  number = str.to_i     # for converting
  book = tags[number]
end

这个效果很好。但我必须再添加一行进行转换。有没有避免这条线的好方法?我的红宝石版本是:$: ruby --version ==> ruby 2.0.0p0 (2013-02-24 revision39474) [i686-linux]

嗨,伙计们,请让我知道您为什么仍要关闭此主题。谢谢。

4

1 回答 1

6

您收到的错误消息肯定只会在您将 aString作为索引传递给Array#[]. 因此,您可能没有向我们展示您实际运行的源代码。考虑:

a = [1,2,3]
str = 'string'

str.to_i
#=> 0
a[str.to_i]
#=> 1

number = str.to_i
#=> 0
a[number]
#=> 1

a['string']
# TypeError: no implicit conversion of String into Integer

顺便说一句,您问题中的错误消息特定于 Ruby 2.0.0:

RUBY_VERSION
#=> "2.0.0"

a = [1,2,3]
a['string']
# TypeError: no implicit conversion of String into Integer

而在 Ruby 1.9.3-p392 中,您将收到以下错误消息:

RUBY_VERSION
#=> "1.9.3"

a = [1,2,3]
a['string']
# TypeError: can't convert String into Integer
于 2013-04-30T09:20:47.647 回答