gpt4 book ai didi

ruby - 从数组中检索输入

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:32 24 4
gpt4 key购买 nike

我有我的系统类

class System
@os
@base
@number
def setOs(newos)
@os = newos
end
def getOs()
return @os
end
def setBase(newbase)
@base = newbase
end
def getBase()
return @base
end
def setSystemNumber(newnumber)
@number = newnumber
end
def getSystemNumber()
return @number
end
end

我有自己的方法可以将多个系统实例添加到数组

def readXMLSystems

doc = Nokogiri::XML(File.open("/Users/lewisardern/Documents/Security-Simulator/lib/xml/boxesconfig.xml"))
# puts doc
systeminstance = ""
systemArray = []

doc.search('//systems/system').each do |system|
systeminstance = System. new
number = system.at('@number').text
systeminstance.setSystemNumber number
os = system.at('@os').text
systeminstance.setOs os
base = system.at('@basebox').text
systeminstance.setBase base

systemArray.insert(systeminstance)
end

return systemArray
end

我通过

调用该方法
sys = readXMLSystems
puts sys

为什么我无法读取 XML 代码?如果我在循环内写入它会吐出

puts systeminstance.getSystemNumber #retrieves input

1
2
3

我希望能够在此阵列中拥有多个系统,但它似乎没有返回...我哪里出错了?

最佳答案

使用

systemArray.push(systeminstance) # or systemArray << systeminstance

代替

systemArray.insert(systeminstance)

另请查看 Ruby style guide .

编辑:只是为了展示如何以 Ruby 风格的方式(未测试)实现相同的目的。如您所见,我删除了超过 80% 的代码。像这样的代码更面向对象、更实用、更干净,并且可以让您拥有更少的错误。

System = Struct.new(:os, :base, :number)

def read_systems_xml
filename = "/Users/lewisardern/Documents/Security-Simulator/lib/xml/boxesconfig.xml"
doc = Nokogiri::XML(File.open(filename))

doc.search('//systems/system').map do |system|
System.new(
system.at('@os').text,
system.at('@basebox').text,
system.at('@number').text)
end
end

关于ruby - 从数组中检索输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com