lua 中引用

引用

在 Lua 中,引用(或引用类型)涉及到如何处理表(Arrays,Tables)和其他复杂数据结构。与基本数据类型(如数字、字符串和布尔值)不同,表是引用类型,这意味着它们在内存中的处理方式与基本数据类型有所不同。

我们用到的所有的 table 都是匿名的,所有的变量,只是对其引用而己。我们对于 table
的操作仅仅是对其引用的操作。
对于 Table 的引用,类似于 C++中 shared_ptr 对于对象的托管一样,采用了引用计数
的方式

引用的概念

基本数据类型(例如,数字和字符串)在赋值时会被复制。这意味着,如果你将一个值赋给另一个变量,两个变量将独立,改变一个变量的值不会影响另一个变量。

引用类型(例如,表)在赋值时不会复制表的内容。相反,赋值会将对同一对象的引用传递给另一个变量。因此,改变一个变量的表内容会影响所有引用该表的变量。

-- 基本数据类型示例
local a = 10
local b = a  -- 赋值
b = 20      -- 只改变 b 的值
print(a)    -- 输出: 10,因为 a 的值没有改变

-- 引用类型示例
local t1 = {
   1, 2, 3}
local t2 = t1  -- 赋值引用
t2[1] = 10     -- 改变 t2 的内容
print(t1[1])   -- 输出: 10,t1 的内容也受到影响

-- 输出内容
print(t1[1])   -- 输出: 10

引用的修改

当你通过引用修改一个表时,所有引用该表的变量都会看到这些更改。

注意事项

循环引用: 表中可以包含对自身的引用,形成循环引用。这可能会导致内存泄漏或复杂性增加。

共享数据: 当多个变量引用同一个表时,任何对该表的修改都将影响所有引用该表的变量。这在某些情况下非常有用,但在不希望副作用发生时也需要注意。

使用元表(Metatables): Lua 允许使用元表自定义表的行为(例如,操作符重载、方法调用),这为引用提供了更强大的功能。

表不存在赋值,只有引用。假设 a 引用一张表,b 也引用一张表,现在将 b = a,只能
说 b 不再引用原先的表,现在同 a 引用同一个表。切勿理解为将 a 指向的表中的内容,拷
贝到了 b 引用的表中

拷贝表

  1. 浅拷贝
    浅拷贝仅复制表的第一层元素。如果表中包含其他表(子表),子表仍然是引用的,不会创建新的实例。这种方法适用于简单的表。
function shallowCopy(original
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可能只会写BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值