我有我的系统类
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
我有一个方法可以将多个system示例添加到数组中
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
我希望能够在此阵列中拥有多个系统,但它似乎没有返回...我哪里出错了?
2条答案
按热度按时间oxalkeyp1#
用途
而不是
另外,请看一下Ruby style guide。
编辑:只是为了展示如何以Ruby风格的方式实现同样的功能(未测试)。正如你所看到的,我删除了超过80%的代码。这样的代码更面向对象,功能更强大,更干净,而且会让你有更少的bug。
ffdz8vbo2#
首先,这是一个非常不地道的Ruby
你不需要手写getter/setter,而且很少需要显式的
return
调用。应使用
attr_accessor
宏编写此代码如果你想手写的话
不要把你以前教过的习语带到你正在学习的新语言中。
反正这个坏了,没有
Array#insert
这种方法请将其更正为
其他悲伤
systemArray
或systeminstance
应分别称为systems
和system
。systemArray
是合适的变量名,它也应该是system_array
。方法名也是如此。setSystemName
应该是system_name=