【问题标题】:Can't change Strings into int in `[]`无法在`[]`中将字符串更改为int
【发布时间】:2013-04-23 23:49:32
【问题描述】:

在 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​​ 版本是:$: ruby --version ==> ruby 2.0.0p0 (2013-02-24 revision39474) [i686-linux]

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

【问题讨论】:

  • 什么是tagsdbbook?如果您的上层代码不起作用,那么第二部分也不起作用。您可能正在通过db[book] 致电array[nil]
  • @oldergod,嗨,我只是修改它。而且我不认为我在调用数组 [nil]。使用相同的输入,我的代码的第二个版本运行良好。
  • 人们想要关闭这个话题,因为缺乏信息,这使得观众很难理解和/或复制你的问题。
  • 可能你不小心写了tags[str]tags['str.to_i']之一,请检查。
  • 两个代码都运行良好。您的问题不清楚。

标签: ruby typeerror


【解决方案1】:

当您将String 作为索引传递给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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多