Ruby 从YAML创建对象,已初始化常量
两个可能相关的问题: 我正在从一个YAML文件中检索大量的“person”到一个数组,现在我正在尝试从该数组中创建类 然后将这些对象放置在新阵列中Ruby 从YAML创建对象,已初始化常量,ruby,initialization,constants,iteration,Ruby,Initialization,Constants,Iteration,两个可能相关的问题: 我正在从一个YAML文件中检索大量的“person”到一个数组,现在我正在尝试从该数组中创建类 然后将这些对象放置在新阵列中 它实际上是很好的,如果你不考虑最后添加的对象替换以前添加的。 在我的例子中,我得到了五个相同的object#5副本,我更喜欢看到五个不同的副本 我猜这个错误会导致迭代器中的某个地方从YAML中获取所有的“persons” 关于常数的“重用”,我收到了很多警告: NEWSTR和NEWAL getPost = 0 loopa = 0 whil
它实际上是很好的,如果你不考虑最后添加的对象替换以前添加的。 在我的例子中,我得到了五个相同的object#5副本,我更喜欢看到五个不同的副本
我猜这个错误会导致迭代器中的某个地方从YAML中获取所有的“persons” 关于常数的“重用”,我收到了很多警告: NEWSTR和NEWALgetPost = 0
loopa = 0
while loopa < personsInYAML
NEWSTR = TEST.fetch(getPost)
NEWAL = NEWSTR.split(' ')
getPost+=1
puts "*****************************************"
nyloop = loopa+1
puts "PERSON: " + nyloop.to_s + " name: " + NEWAL.fetch(1)
nameToArray = Person.new
outputArray.insert(loopa, nameToArray)
loopa+=1
end
您在填充Person类时采取了错误的方法。循环要做的唯一一件事就是创建全新的Person类并将它们粘贴到一个数组中。它实际上根本没有初始化person类 看起来您试图做的是使用一个常量(您不保持常量)将信息传递给Person类。但是,Person类中位于方法之外的代码只会运行一次—当类第一次加载时,而不是在创建新Person时 最好更改initialize方法以获取一些参数,并在循环中创建具有适当参数的类
def initialize(name, age = nil, length = nil, weight = nil, misc = nil)
# assign instance variables here
@name = name
...
end
您似乎正在尝试创建实例变量的动态访问器。这没有多大意义。只需在所有这些类上定义访问器,并处理实例变量在调用Person类的任何代码中为nil的情况
def initialize(name, age = nil, length = nil, weight = nil, misc = nil)
# assign instance variables here
@name = name
...
end