Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Lua 局部变量赋值_Lua_Variable Assignment_Local - Fatal编程技术网

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,#基因组.基因)],因为基因是一个参考。从: 表、函数、线程和(完整

我最近一直在看一些Lua代码,作者多次指定一个局部变量,改变局部变量似乎也会改变指定变量,因为他之后不会对局部变量做任何事情。是这样,还是这些更改不影响原始值

基因结构

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%确定的。如果不知道这两个代码段在哪个范围关系中,就无法回答您的问题。你的话也很让人困惑:“作者分配了一个局部变量,改变了局部变量,似乎也改变了分配变量的预期结果”什么?很抱歉,这让人困惑,我很难解释。作者似乎