我试图运行此代码:
def get_linedict(filename,source)
`dwarfdump -l #{source} > dwarfline.txt`
linefile = File.new("dwarfline.txt","r")
match = false
linefile.readlines.each do |line|
puts line
if /uri:/ =~ line
file = line.match(/.*\/(.*)"/)[1]
if file == filename
match = true
end
puts file
puts match
end
end
当我这样做时,我收到以下错误:
assn4.rb:12:in `block in get_linedict': undefined method `[]' for nil:NilClass (NoMethodError)
from assn4.rb:9:in `each'
from assn4.rb:9:in `get_linedict'
from assn4.rb:126:in `block in <main>'
from assn4.rb:80:in `each'
from assn4.rb:80:in `<main>'
如果我将每个循环更改为只打印它读取的行,它就可以正常工作。据我了解,我得到的错误来自于nil不应该出现的错误,但如果错误来自每个循环,为什么我能打印出文件?
答案 0 :(得分:0)
我想在调用所需数组的元素之前,首先要询问line.match是否得到了什么。
line.match(/.*\/(.*)"/)[1]
答案 1 :(得分:0)
当您致电line.match(/.*\/(.*)"/)
时,结果为nil
。然后,您尝试以nil
身份访问Array
。那是你得到undefined method []' for nil:NilClass
的时候。
至于你问题的这一部分
但如果该错误来自每个循环,为什么我能打印出文件?
每个循环都会导致代码失败并在发生错误时暂停。由于您尝试在错误之后打印file
,因此实际上您不会在循环的迭代中打印出file
。
请注意,line
可能不是nil
。您的正则表达式可能只是没有涵盖您认为的所有情况,因此其中一个match
调用失败并返回nil
。