Lua 局部变量赋值
我最近一直在看一些Lua代码,作者多次指定一个局部变量,改变局部变量似乎也会改变指定变量,因为他之后不会对局部变量做任何事情。是这样,还是这些更改不影响原始值 基因结构Lua 局部变量赋值,lua,variable-assignment,local,Lua,Variable Assignment,Local,我最近一直在看一些Lua代码,作者多次指定一个局部变量,改变局部变量似乎也会改变指定变量,因为他之后不会对局部变量做任何事情。是这样,还是这些更改不影响原始值 基因结构 local gene = {} gene.into = 0 gene.out = 0 gene.weight = 0.0 gene.enabled = true gene.innovation = 0` 代码 对基因的更改可能会影响基因组.基因[数学随机(1,#基因组.基因)],因为基因是一个参考。从: 表、函数、线程和(完整
local gene = {}
gene.into = 0
gene.out = 0
gene.weight = 0.0
gene.enabled = true
gene.innovation = 0`
代码
对
基因的更改
可能会影响基因组.基因[数学随机(1,#基因组.基因)]
,因为基因
是一个参考。从:
表、函数、线程和(完整的)userdata值都是对象:变量实际上并不包含这些值,只包含对它们的引用。赋值、参数传递和函数返回总是操纵对这些值的引用;这些操作并不意味着任何类型的复制
这意味着,将变量指定给对象时,将引用复制到该对象,而不是对象本身
例如:
local a = {1,2,3}
local b = a
b[1] = 'a'
表
a
现在包含{'a',2,3}
,因为b
是对a
的引用对基因的更改可能会影响基因组。基因[数学随机(1,#基因组.基因)]
,因为基因是一个引用。从:
表、函数、线程和(完整的)userdata值都是对象:变量实际上并不包含这些值,只包含对它们的引用。赋值、参数传递和函数返回总是操纵对这些值的引用;这些操作并不意味着任何类型的复制
这意味着,将变量指定给对象时,将引用复制到该对象,而不是对象本身
例如:
local a = {1,2,3}
local b = a
b[1] = 'a'
表a
现在包含{'a',2,3}
,因为b
是对a
的引用,从我对代码的阅读来看,我认为:
local gene1 = copyGene(gene) -- local copy, distinct from original 'gene'
-- (modifications of 'gene1')
table.insert(genome.genes, gene1) -- add modified copy to 'genome.genes'
所以我猜copyGene
产生了gene
的一个副本,这意味着gene
没有被修改(只有gene1
,gene2
)。对这些变量的引用保存在local
变量中,并且这些引用确实超出了块末尾的范围。但是修改后的拷贝被添加到列表中(/array/sequence,不管你怎么称呼它)genome.基因
,它确实产生了一种外部可见的效果(因为该变量–genome
–来自外部)
我对代码的更高层次的印象是基因组。基因
是一系列可能启用或不启用的基因。每次运行此函数都会随机选取其中一个基因,如果启用了,(1)禁用它,并(2)向基因组添加两个修改的启用的副本。基因(这可能是以后运行中新副本的基础)。从我对代码的阅读中,我认为:
local gene1 = copyGene(gene) -- local copy, distinct from original 'gene'
-- (modifications of 'gene1')
table.insert(genome.genes, gene1) -- add modified copy to 'genome.genes'
所以我猜copyGene
产生了gene
的一个副本,这意味着gene
没有被修改(只有gene1
,gene2
)。对这些变量的引用保存在local
变量中,并且这些引用确实超出了块末尾的范围。但是修改后的拷贝被添加到列表中(/array/sequence,不管你怎么称呼它)genome.基因
,它确实产生了一种外部可见的效果(因为该变量–genome
–来自外部)
我对代码的更高层次的印象是基因组。基因
是一系列可能启用或不启用的基因。每次运行此函数都会随机选取其中一个基因,如果启用了,(1)禁用它,并(2)向基因组添加两个已修改的已启用的拷贝。基因
(这可能是以后运行中新拷贝的基础).如果不知道这两个代码段在哪个作用域关系中,就无法回答您的问题。你的话也很让人困惑:“作者分配了一个局部变量,改变了局部变量,似乎也改变了分配变量的预期结果”什么?很抱歉,这让人困惑,我很难解释。作者似乎将值分配给局部变量,然后编辑这些局部变量,而不分配这些局部变量,就好像这些局部变量充当指针一样,对局部变量所做的更改将影响分配给局部变量的变量。我给出的代码示例来自一个函数,他在函数中指定了一个局部变量基因,然后在基因中编辑一个值。然后函数结束,对局部变量gene没有其他处理。粘贴整个函数,这样我们就不必猜测了。没有上下文,代码就没有多大意义。某些值在Lua中通过引用进行复制。假设您命名为“gegen构造”的部分正在创建一个局部变量,然后将其放入表genome.genes中,您随后当然可以使用类似于“代码”部分的引用来更改该基因的值。在您继续添加整个函数之前,请阅读。函数的目的应包括将赋值基因的enabled更改为false,但他仅对局部变量执行此操作,而不是对原始变量执行此操作。如果不知道copyGene执行什么操作(未提供代码),则无法回答此问题。但名称表明该函数返回所提供基因的副本。所以基因1或基因2的改变不应该影响基因。但如果没有看到copyGenes的实现,这不是100%确定的。如果不知道这两个代码段在哪个范围关系中,就无法回答您的问题。你的话也很让人困惑:“作者分配了一个局部变量,改变了局部变量,似乎也改变了分配变量的预期结果”什么?很抱歉,这让人困惑,我很难解释。作者似乎