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" :-(