使用哈希

时间:2016-11-12 21:17:22

标签: ruby hash

嘿伙计们,我觉得我很接近这一点,但和往常一样,我认为我会轻易搞砸语法。目标是解析mime.type文件以查看MIME类型是否具有扩展名。我必须在哈希中做到这一点。输出应该读取类似的内容," foo / bar有扩展垃圾邮件,鸡蛋,或者应该读取" foo / bar没有extionsions"如果扩展没有标记。以下是我迄今取得的进展:

#!/user/bin/ruby
#comment line
lineHash = Hash.new
File.open("/etc/mime.types", "r") do |file|
    file.each_line do |line|
            next if line[0] == ?#
            next if line == "\n"
            line = line.chomp.split
            lineHash[line[0]] = line[1..-1]
    end
end
lineHash.each do |key, value|
    if value.length == 0
            puts key + ' has no extensions.'
    else
            puts key + ' has extensions ' + value.join(',')
    end
end

我在运行脚本时收到的错误是:

parsemime.rb:13:in block in <main>': undefined method 'length' for nil:NilClass (NoMethodError)
from parsemime.rb:12:in 'each'
from parsemime.rb:12:in '<main>'

似乎在lineHash.each do | key,value |上失败了从第12行开始 第13行(下一行)正在读取未定义的长度方法。

我通过电子邮件向我的教授发送了指导,并被告知:&#34;我收到的错误表明解释器行不正确。可以通过发出which ruby​​命令来确定正确的路径。&#34;

我不确定这是诚实的意思。我试图在lineHash.each do | key,value |之前放一会儿并收到语法错误,其中表示意外&#34; |&#34;,期待&#34; =&#34;

1 个答案:

答案 0 :(得分:0)

似乎你需要在尝试获取其长度之前检查该值是否为nil

lineHash.each do |key, value|
    if !value.is_a?(Array) || value.empty?
            puts key + ' has no extensions.'
    # ...