Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
RubyonRails-如何多次更改变量值并保存它?_Ruby_Json - Fatal编程技术网

RubyonRails-如何多次更改变量值并保存它?

RubyonRails-如何多次更改变量值并保存它?,ruby,json,Ruby,Json,我正试图这样做: $var = 0 #This stay inside a JSON Object newVar = [] n.times do |i| newVar.push(randomize($var)) end def randomize(thisVar) thisVar = Random.new.rand(0 .. 100) return thisVar end 但是我总是在数组中的所有变量上得到相同的值newVar[] 我尝试了.dup和.clone,以避免为所有字

我正试图这样做:

$var = 0 #This stay inside a JSON Object
newVar = []

n.times do |i|
  newVar.push(randomize($var))
end

def randomize(thisVar)
  thisVar = Random.new.rand(0 .. 100)
  return thisVar
end
但是我总是在数组中的所有变量上得到相同的值
newVar[]

我尝试了.dup和.clone,以避免为所有字段赋予相同的值。但它不起作用

真实代码:

    # IdeenAG: Operacoes Geneticas
    def novaPopulacao ()
        puts "\n\nIdeenAG: Criando Populacao ("+$parametros['populacaoInicial']+")\n"

        tempVar = []
        populacaoCriada = []
        xtimes = $parametros['populacaoInicial'].to_i

        xtimes.times do |i|
            populacaoCriada.push(mutar($variaveis.clone))
        end

        puts populacaoCriada.to_s+"\n"
        return populacaoCriada
    end

def mutar (varArray)
    varArray.each_with_index do |variavel,index|
        puts "IdeenAG: Mutando População ("+variavel['nome']+")\n"
        variavel['valor'] = Random.new.rand(variavel['minimo'].to_i .. variavel['maximo'].to_i)
    end

    return varArray
end
实际结果(有3个变量)


请参见字段“valor”,它始终是相同的值!我需要随机化。

要更正您的第一段代码,您正在寻找:

$var = 0 #This stay inside a JSON Object
newVar = []

n.times do |i|
  newVar.push(randomize)
end

def randomize
  thisVar = Random.new.rand(0 .. 100)
  return thisVar
end

这会将
newVar
设置为0到100之间的随机数数组。数组的长度将是
n

dup
clone
都只复制浅拷贝,这意味着它们只复制顶级结构。典型的json是深度嵌套的

举个例子。第一,无副本:

h1 = {a:"a", b:1}
h2 = h1
h1[:a] = "aa"
h2[:a]
这会像预期的那样返回“aa”,因为h1和h2是同一个对象

现在用一个dup

h1 = {a:"a", b:"b"}
h2 = h1.dup
h1[:a] = "aa"
h2[:a]
# returns "a", everything looks good
h1[:b].upcase!
h2[:b]
# returns "B" :-(
h2散列是新的,但在中包含指向旧对象的指针。如果在位编辑这些对象,h2也将获得这些编辑

那么,如何避免这种情况呢?通常,您只需从头开始创建jsons对象。您还可以制作一份深度副本,例如,请看以下问题:


或者您可以直接调用
rand
方法,在我的例子中:
newvar.push(rand(0..100))
。。我有一个JSON对象数组,每个数组有3个参数,其中x个是一个输入字段的值。。其中一个参数是它的“值”。。当我尝试随机化的时候。。它起作用了。。我将这个JSON对象放入一个新数组中,其中包含您的新值。。然后再重复一遍。。这将是有问题的。。Hes会将最后一个随机值设置为在本次迭代之前存储的所有其他JSON对象:/i已经在控制台上发布了我的代码和结果的打印屏幕。。见第一篇文章。。也许会更容易理解我:)听起来英语可能不是你的第一语言。我们还有西班牙语栈溢出:和葡萄牙语栈溢出:这个简单的例子似乎按预期的那样工作。为什么要删除原始代码的内联代码?我们更喜欢内联代码而不是截图。那么$variaveis到底是什么呢?我认为这个全局变量是问题的关键。请不要发布代码链接或使用图像。在搜索或测试代码时,我们不能重用图像,链接会腐烂然后断开,从而导致问题信息丢失。相反,插入演示问题所需的最少代码,以及必要的输入数据和预期的输出数据。请读“。在Ruby中,我们使用snake\u case,因此使用
this\u var
new\u var
而不是
thisVar
newVar
。@theTinMan snake case真的是Ruby约定吗?我已经看过骆驼和蛇的情况下使用,不明白为什么它会有不同。1000000000000000。倍做| ty |谢谢!!!!!!!!!!!!!!!!!!!!!!!!结束我为它工作了很多天(和晚上)你救了我的毕业!!!非常感谢。
h1 = {a:"a", b:"b"}
h2 = h1.dup
h1[:a] = "aa"
h2[:a]
# returns "a", everything looks good
h1[:b].upcase!
h2[:b]
# returns "B" :-(