得到一个nil:数组的NilClass错误,不知道为什么

时间:2013-06-14 19:41:26

标签: ruby

我收到一个错误,'+'未定义为nil:NilClass。我假设这是来自

index[word] += 1

但我不确定为什么。我正在使用1.9.3。

如果有人可以提供帮助,我们将不胜感激! 感谢

def most_common_words(text)
text_split = text.split(' ')
index = {}
text_split.each do |word| 
    puts index
    puts word
    if (index[word]
        index[word] += 1 )
    else(
        index[word] = 1 )
    end
end
index.to_a.sort[0..2]

2 个答案:

答案 0 :(得分:1)

评论勉强正确。

它忽略了实际问题,即您的格式错误的if语句。

如果您修复语法,代码将按照编写的方式工作:

index = {}
%w[ohai kthx ohai].each do |word|
  if index[word]
    index[word] += 1
  else
    index[word] = 1
  end
end
puts index.inspect
=> {"ohai"=>2, "kthx"=>1}

或者您可以提供默认值:

index2 = Hash.new(0)
%w[ohai kthx ohai].each do |word|
  index2[word] += 1
end
puts index2.inspect
=> {"ohai"=>2, "kthx"=>1}

答案 1 :(得分:0)

您应该能够将此代码简化为更少的行。它会让它看起来更漂亮,更清洁。

    def most_common_words(text)
      text_split = text.split(' ')
      index = Hash.new(1)
      text_split.each do |key, value|
        puts "The key is #{key} and the value is #{value}"
        index[key] += 1
      end
    end
    index.to_a.sort[0..2]