首页 > 解决方案 > 无法解析枪支和弹药类型列表以排列和显示结果

问题描述

我正在学习 Ruby 并练习解析视频游戏中的枪支列表 - 我按照说明进行操作,并完全按照他们解析姓名/年龄列表的方式进行操作,但我无法运行此代码......

我尝试在解析之前创建一个 Guns.new(name, ammo) 无效..

# FILE IN FORMAT "gun, ammo" IS IN "gunsammo.txt"
def load_guns(filename)
  guns = []
# load gun names and ammo types from file "gunsammo.txt"
  file = File.open(filename, "r+").read
  file.lines do |line|
    gun_type = line.split(", ")
    name = gun_type.first #[0]
    ammo = gun_type.last.to_s #[1]
    gun = Guns.new(name, ammo)
    guns << gun
    # puts "imported #{gun.display}"
  end
  # RETURN GUNS FROM TEXT gunsammo.txt
  guns
end

eft_guns = load_guns("gunsammo.txt")
eft_guns.each {|gun| p guns}

我希望以数组格式获得以下列表的输出:

[
ADAR 2-15, 5.56x45mm NATO
AK-101, 5.56x45mm NATO
AK-102, 5.56x45mm NATO
AK-103, 7.62x39mm
AK-104, 7.62x39mm
AK-105, 5.45x39mm
AK-74, 5.45x39mm
AK-74M, 5.45x39mm
AK-74N, 5.45x39mm
]

相反,我得到了这些错误:

enter code here

/RUBY/class_ammo.rb:11:in `block in load_guns': uninitialized constant Guns (NameError)
    from C:/Users/**/Documents/CODING/RUBY/class_ammo.rb:7:in `lines'
    from C:/Users/**/Documents/CODING/RUBY/class_ammo.rb:7:in `load_guns'
    from C:/Users/**/Documents/CODING/RUBY/class_ammo.rb:19:in `<main>'

标签: rubyfileparsing

解决方案


Ruby 不知道 Guns 是什么。您需要定义一个 Guns 类。实际上,我将它命名为 Gun,因为类名通常应该是单数。

class Gun
    attr_reader :name
    attr_reader :ammo

    def initialize ( name, ammo )
        @name = name
        @ammo = ammo
    end
end

您的输入文件也永远不会关闭。要逐行读取文件,您可以使用这个方便的方法:

File.readlines(filename).each do |line|
    # Do something with line
end

使用这种方法,文件最后会自动关闭。


推荐阅读