没有从nil到整数的隐式转换

时间:2012-09-11 02:22:09

标签: ruby implicit-conversion

我有一个从html和使用split函数创建的字符串数组。我试图用以下方法迭代它:

html_array.each do |line|
    ...
end

puts可以line每个puts line.index('text')内的字符串索引puts,我可以puts line[17] puts line[line.index('text')] 索引处的字符{(1}}其中打印为nil),但当我将两者合并为一个命令时,如

no implicit conversion from nil to integer (TypeError)

它给了我错误:

{{1}}

有人可以告诉我我做错了什么吗?我是编程和ruby btw的新手。

3 个答案:

答案 0 :(得分:4)

line.index('text')在某个时刻返回nil,因为在该行中找不到字符串“text”。然后,您尝试访问line[nil],这是一个无效的数组索引。

这样的事可能会更好:

index = line.index('text')
if index.nil?
  puts "Text not found"
else
  puts line[index]
end

这将在尝试使用之前检查字符串的索引是否为nil(并且如果该行不包含该字符串将提醒您。)

答案 1 :(得分:0)

只是为了追踪某些行中是否有错误,请尝试:

html_array.each do |line|
  puts (line[line.index('text')] rescue "nil")
end

对于每一行都会出现错误的“nil”。我怀疑每行都没有出现“文字”。你能分享一下你想要完成的事情吗?

答案 2 :(得分:0)

您可以轻松地完成以下操作:

   html_array.each do |line|
        if line.index("Text").present?
          puts line[line.index("Text")]
        end
    end