我能够解决这个问题,但我不明白如何解决。
当我对数组执行追加操作时,最后追加的值将成为数组中所有记录的值。
var myBus=BusinessType.new()
func _on_load
for i in businesses_json.get_data():
myBus.name=i.name
print ("showint previous array after name:")
for j in Global.businesses:
print (j.name)
myBus.location=i.location
print ("adding "+myBus.name)
Global.businesses.append(myBus)
print ("now the global array is:")
for j in Global.businesses:
print (j.name)
这提供了下面的输出。
showint previous array after name:
adding first
now the global array is:
first
showint previous array after name:
second
adding second
now the global array is:
second
second
showint previous array after name:
third
third
adding third
now the global array is:
third
third
third
number business = 3
当我移动
var myBus=BusinessType.new()
到 within for i 循环然后我得到正确的输出
showint previous array after name:
adding first
now the global array is:
first
showint previous array after name:
first
adding second
now the global array is:
first
second
showint previous array after name:
first
second
adding third
now the global array is:
first
second
third
number business = 3
有人可以解释为什么在每个循环中重新定义变量可以解决问题吗?它是否以某种方式充当指针?这不是消耗更多的内存资源,每次迭代都要重新定义吗?
有更好的方法吗?
变量 myBus 在循环外部定义,并在所有迭代中使用。这意味着您多次将同一对象 (myBus) 附加到 Global.businesses 数组。因此,Global.businesses 中的每个元素最终都是对同一对象的引用。由于 myBus 是同一对象,因此对 myBus 所做的任何更改都会反映在 Global.businesses 中的所有条目中。当循环完成时,Global.businesses 中的所有条目都指向 myBus 的最后状态,因此所有记录都具有相同的值。当我需要单独的实例时,我尝试在循环或函数内实例化新对象。是的,每次迭代中的新对象都需要更多内存,但它可能可以忽略不计。