Ruby Spell Checker无法正常工作

时间:2014-03-25 02:01:19

标签: ruby spell-checking

我正在用ruby编写一个小项目,它从网站上获取所有单词,然后对它们进行简短的排序。

要验证排序的内容实际上是有效的英语,我将一组已删除的单词与基本的unix / osx单词文件进行比较。

执行此操作的方法是spell_check方法。问题是,当在小数组上使用时工作正常,但是对于较大的数组,它会让非单词通过。有什么想法吗?

def spell_check (words_array)
  dictionary = IO.read "./words.txt"
  dictionary = dictionary.split 
  dictionary.map{|x| x.strip }

  words_array.each do |word|
    if !(dictionary.include? word)
      words_array.delete word
    end 
  end 

  return words_array
end 

1 个答案:

答案 0 :(得分:1)

我简化了你的代码,也许这会有效吗?

def spell_check(words)
  lines = IO.readlines('./words.txt').map { |line| line.strip }
  words.reject { |word| !lines.include? word }
end

我注意到您在使用words_array进行迭代时尝试修改each

words_array.each do |word|
  if !(dictionary.include? word)
    words_array.delete word # Delete the word from words_array while iterating!
  end 
end

我不确定Ruby中是否就是这种情况,但是在其他编程语言(如Java和C#)中,尝试修改集合,同时在同时迭代它时,会使迭代,并产生意外行为,或只是抛出错误。也许这是您原始代码的问题?

此外,原始代码中不需要return语句,因为始终返回在Ruby块中计算的最后一个语句(除非在最后一个语句之前有一个显式return )。在这种情况下,它是惯用的Ruby。