
[英]Ruby undefined method `[]' for nil:NilClass (NoMethodError) error
[英]Getting error undefined method `[]' for nil:NilClass (NoMethodError)
这是代码
class Tech
attr_reader :content, :tech_hash
@tech_hash = Hash.new(0)
def initialize(content)
@content = content
showTech(content)
end
def showTech(content)
content.split.each do |word|
@tech_hash[word] += 1
end
@tech_hash = @tech_hash.sort_by{|k,v| -v}.to_h
p @tech_hash
end
end
class Digital
def analyze()
File.foreach('test.txt') do |content|
ob = Tech.new(content)
end
end
end
digi = Digital.new()
digi.analyze()
这是错误
D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:10:in `block in showTech': undefined method `[]' for nil:NilClass (NoMethodError)
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:9:in `each'
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:9:in `showTech'
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:6:in `initialize'
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:22:in `new'
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:22:in `block in analyze'
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:20:in `foreach'
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:20:in `analyze'
from D:/graded-assignments/course01/module02/assignment-Calc-Max-Word-Freq/Tech.rb:29:in `<main>'
@tech_hash
是在实例方法之外定义的,这使它成为类变量。 因此,在showTech
内仍然没有定义@tech_hash
实例变量,因此它返回nil
只需将@tech_hash
移到initialize
方法中即可初始化实例变量:
def initialize(content)
@content = content
@tech_hash = Hash.new(0)
showTech(content)
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.