【问题标题】:Ruby : Getting error []': no implicit conversion of String into Integer (TypeError)Ruby:出现错误 []':没有将 String 隐式转换为 Integer (TypeError)
【发布时间】:2017-07-04 10:26:45
【问题描述】:
class LineAnalyzer
    @@highest_wf_count = 0
    @@highest_wf_words = Hash.new(0)

    def initialize(content, line_number)
      @content = content
      @line_number = line_number
      calculate_word_frequency(content)
    end

    def calculate_word_frequency(content)
        content.split.each do |word|
          @@highest_wf_words[word.downcase] +=1
        end
        @@highest_wf_words = @@highest_wf_words.sort_by{|k,v| -v}
    end
end 

class Solution

    def initialize()
        @analyzers = Array.new
        @highest_count_words_across_lines = Array.new
    end
    def analyze_file()
        @line_number = 0
        File.foreach('test.txt') do |content|
          @line_number += 1
          @line = LineAnalyzer.new(content,@line_number)
          @analyzers.<<(@line)
        end
    end    
end

在尝试创建 LineAnalyzer 对象并传递值时,出现以下错误:

@line = LineAnalyzer.new(content,@line_number)

这是我得到的:

Max-Word-Freq/module2_assignment.rb:34:in `calculate_word_frequency'
    from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/module2_assignment.rb:25:in `initialize'
    from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/module2_assignment.rb:68:in `new'
    from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/module2_assignment.rb:68:in `block in analyze_file'
    from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/module2_assignment.rb:66:in `foreach'
    from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/module2_assignment.rb:66:in `analyze_file'
    from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/solution.rb:10:in `<main>'

【问题讨论】:

  • 你尝试用一个字符串索引一个数组。看起来像在calculate_word_frequency
  • 能否贴一下日志
  • 请编辑问题,而不是在 cmets 中添加其他信息
  • 您能指出确切的错误行吗?
  • content 的值是多少? #34 中的哪一行?提供更多详细信息。

标签: ruby-on-rails ruby


【解决方案1】:

您遇到此错误是因为您尝试使用 Array,例如 Hash
在这一行:

 @@highest_wf_words = @@highest_wf_words.sort_by{|k,v| -v}

第一次@@highest_wf_words 确实是Hash,但sort_by 方法返回Array。所以当你再次使用它时,就会出现错误。

如果您想按值对哈希进行排序,您可以这样做:

@@highest_wf_words = Hash[@@highest_wf_words.sort]
# Or reverse it
@@highest_wf_words = Hash[@@highest_wf_words.sort.reverse]

看这个以获得进一步的解释:Hash::[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多