LUA返回的是引用

本文通过一个简单的Lua脚本示例,展示了如何通过表引用实现两个变量之间的数据同步更新。即使其中一个变量被置为nil,也不会影响另一个变量对原始数据的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

local t1= {10,11}
function t1.Show()
    print("t1 show")
end
function GetT() return t1 end


local t2 = GetT()


t2[1] = 5 --修改t2会同步修改t1
print(t1[1])


t1[1] = 55 --修改t1会同步修改t2
print(t2[1])

t1 = nil
print(t2[1]) ----将t1置nil 为什么不会影响t2 
复制代码

 

### 如何在 Lua 中加载其他 Lua 文件 在 Lua 中,`require` 和 `dofile` 是两种常见的方法用于加载和运行其他 Lua 文件。 #### 使用 `require` 加载模块 `require` 函数主要用于加载并缓存 Lua 模块。它会按照指定的路径查找目标文件,并确保同一个模块不会被多次加载[^1]。 下面是一个简单的例子: 假设有一个名为 `mymodule.lua` 的文件,其内容如下: ```lua -- mymodule.lua function greet(name) print("Hello, " .. name) end return {greet = greet} ``` 可以在另一个 Lua 脚本中通过 `require` 来加载这个模块: ```lua local mymodule = require("mymodule") mymodule.greet("World") -- 输出: Hello, World ``` 注意:`require` 查找模块时,默认会在 `package.path` 定义的路径中寻找 `.lua` 文件。如果自定义模块不在默认路径中,则需要修改 `package.path` 变量。例如: ```lua package.path = package.path .. ";./mylibs/?.lua" local mymodule = require("custom_module") ``` --- #### 使用 `dofile` 执行 Lua 文件 `dofile` 函数可以直接执行指定的 Lua 文件,但它不会缓存已加载的内容,每次调用都会重新解析整个文件。 假设有以下文件 `script.lua`: ```lua print("This is script.lua being executed.") ``` 可以通过以下方式加载该文件: ```lua dofile("script.lua") -- 输出: This is script.lua being executed. ``` 需要注意的是,`dofile` 不返回任何值,因此适合用来执行一些初始化代码或配置脚本。 --- #### 设置模块搜索路径 (`package.path`) 当使用 `require` 时,Lua 默认会根据 `package.path` 的设置来定位模块文件。可以手动调整此变量以支持更多目录中的模块加载。例如: ```lua package.path = package.path .. ";/path/to/my/modules/?.lua;/another/path/?.lua" local anotherModule = require("another_module") ``` 上述代码将 `/path/to/my/modules/` 和 `/another/path/` 添加到了模块搜索路径中。 --- ### 总结 - 如果希望加载一个可重复使用的模块,推荐使用 `require`。 - 对于一次性执行的任务或者不需要缓存的情况,可以选择 `dofile`。 - 自定义模块路径可通过修改全局变量 `package.path` 实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值