ruby - 无法解析枪支和弹药类型列表以排列和显示结果
问题描述
我正在学习 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>'
解决方案
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
使用这种方法,文件最后会自动关闭。
推荐阅读
- python - 图像压缩 Linux CLI
- google-drive-api - 如何知道谷歌驱动器中的两个目录是否相同
- html - 引导程序和角度循环
- sql - 在多列中使用 EXISTS 和 NOT EXISTS
- java - 如何在android中以编程方式将xml资源转换为int?
- javascript - RxJS 将 2 个数组映射为一个并添加一个属性。哪个运营商?
- .net - 在 RSASSA-PSS 和 RSASSA-PKCS1-v1_5 之间切换是否应该注意其他参数?
- junit - 在不同的测试方法中未返回预期值时的 Mockito
- c# - Azure 配置应用程序设置中的字典
- java - seekbar 在片段上指向 null 错误的进度