Lua中传值与传引用(传址)有何区别?

2026-03-31 22:431阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计435个文字,预计阅读时间需要2分钟。

Lua中传值与传引用(传址)有何区别?

在Lua中,除了table是引用传递外,其他基本数据类型都是值传递。因此,当你直接打印一个table时,看到的是指向该table的一个指针类型的数据。一方面,不能通过简单的+来复制一个表,因为这样传递的是引用,而非真正的复制。

在lua中除了table是引用传递外,其余基本都是值传递。所以当你直接打印一个table的时候,看到的是一个指针类型的数据。

一方面,不能通过简单的 “ = ”来copy一个表,因为这样传过去的还是它自身的引用(地址),必须通过额外写一个方法来实现table的复制;

另一方面,通过函数return返回的table类型数据,也是返回的引用,如果希望通过只读的方式拿到数据,则应在拿到后进行一下copy的操作,然后再对副本进行修改;

而对于除table外的其它常见数据类型,则基本都是传值的方式,下面以函数为例:

function fun_1()

print("第一个函数")

end

functionfun_2()

print("第二个函数")

end

x= fun_1

y=x

x=fun_2

y()

x()

输出:第一个函数 -- 修改x对y没有产生影响,可见是 “值传递” 的方式。

第二个函数

Lua中传值与传引用(传址)有何区别?

下面举一个实现copy table的例子:

function cloneTable(tab) --克隆一份table localfunctioncopy(target,res) fork,vinpairs(target)do iftype(v)~="table"then res[k]=v; else res[k]={}; copy(v,res[k]) -- 递归 end end end localresult ={} copy(tab,result) returnresult end

本文共计435个文字,预计阅读时间需要2分钟。

Lua中传值与传引用(传址)有何区别?

在Lua中,除了table是引用传递外,其他基本数据类型都是值传递。因此,当你直接打印一个table时,看到的是指向该table的一个指针类型的数据。一方面,不能通过简单的+来复制一个表,因为这样传递的是引用,而非真正的复制。

在lua中除了table是引用传递外,其余基本都是值传递。所以当你直接打印一个table的时候,看到的是一个指针类型的数据。

一方面,不能通过简单的 “ = ”来copy一个表,因为这样传过去的还是它自身的引用(地址),必须通过额外写一个方法来实现table的复制;

另一方面,通过函数return返回的table类型数据,也是返回的引用,如果希望通过只读的方式拿到数据,则应在拿到后进行一下copy的操作,然后再对副本进行修改;

而对于除table外的其它常见数据类型,则基本都是传值的方式,下面以函数为例:

function fun_1()

print("第一个函数")

end

functionfun_2()

print("第二个函数")

end

x= fun_1

y=x

x=fun_2

y()

x()

输出:第一个函数 -- 修改x对y没有产生影响,可见是 “值传递” 的方式。

第二个函数

Lua中传值与传引用(传址)有何区别?

下面举一个实现copy table的例子:

function cloneTable(tab) --克隆一份table localfunctioncopy(target,res) fork,vinpairs(target)do iftype(v)~="table"then res[k]=v; else res[k]={}; copy(v,res[k]) -- 递归 end end end localresult ={} copy(tab,result) returnresult end