Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从YAML创建对象,已初始化常量_Ruby_Initialization_Constants_Iteration - Fatal编程技术网

Ruby 从YAML创建对象,已初始化常量

Ruby 从YAML创建对象,已初始化常量,ruby,initialization,constants,iteration,Ruby,Initialization,Constants,Iteration,两个可能相关的问题: 我正在从一个YAML文件中检索大量的“person”到一个数组,现在我正在尝试从该数组中创建类 然后将这些对象放置在新阵列中 它实际上是很好的,如果你不考虑最后添加的对象替换以前添加的。 在我的例子中,我得到了五个相同的object#5副本,我更喜欢看到五个不同的副本 我猜这个错误会导致迭代器中的某个地方从YAML中获取所有的“persons” 关于常数的“重用”,我收到了很多警告: NEWSTR和NEWAL getPost = 0 loopa = 0 whil

两个可能相关的问题:

我正在从一个YAML文件中检索大量的“person”到一个数组,现在我正在尝试从该数组中创建类

然后将这些对象放置在新阵列中

它实际上是很好的,如果你不考虑最后添加的对象替换以前添加的。 在我的例子中,我得到了五个相同的object#5副本,我更喜欢看到五个不同的副本

我猜这个错误会导致迭代器中的某个地方从YAML中获取所有的“persons”

关于常数的“重用”,我收到了很多警告: NEWSTR和NEWAL

getPost = 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