当前位置: 首页 > news >正文

Lua的函数参数为table时奇特现象

前言

今天在工作中使用lua编写代码时发生了一个有趣的现象,特此记录一下。

问题再现

当lua的函数为table时会发生什么情况,话不多说直接上代码:

local tb = {1, 2, 3}

function testObject(tab, index)
    tab[10] = 110
    tab = {4,5,6} 
    tab = tab[index]
    return tab
end

print("tb[2] =", testObject(tb, 2))

for k,v in pairs(tb) do
    print(k,v)
end

大家来猜一猜输出结果是什么?反正我是理解错了,我把结果粘出来咱们一起看一下吧

tb[2] = 5
1 1
2 2
3 3
10 110

不知道大家看到这个结果有没有不理解的,反正我一开始是没有明白,但是做了几次试验以后渐渐理解了这种行为…

总结

  • 我们都知道lua函数的参数为table时是引用传递,也就是在函数中对参数table的修改会反应到函数的“外部”。
  • 如果我是修改参数table的部分字段的时候也确实这样,比如tab[10] = 110
  • 但是我如果直接给这个table赋值,它就会变成一个局部变量,切断了和“外部”的联系,比如例子中的tab变量。
  • 这仅仅是我个人的理解,如果我理解的有问题或者大家有更加真确的解释,欢迎给我留言指出,我会尽快改正的。

相关文章:

  • UE4引擎自定义插件导出类定义的简单流程
  • Lua收到C++传入的参数类型有一种userdata
  • Lua中可完美运行的三目运算符
  • Lua中 'local xxx do ... end' 到底表达了什么
  • Python树形打印目录结构
  • 排序算法系列之(二)——冒泡排序名字最为形象的一个
  • Python查找文件中包含中文的行
  • sscanf类似于正则表达式的进阶用法
  • mysql函数扩展之UDF开发
  • Python实现一个简单的图片爬虫
  • 验证mysql联合索引最左原则
  • Mysql查询时case when语句的使用
  • Vim中简单格式化代码
  • Vim、Xshell、远程终端莫名卡死的原因
  • 关于游戏中仓库类的设计
  • [译]CSS 居中(Center)方法大合集
  • Js基础——数据类型之Null和Undefined
  • Mac转Windows的拯救指南
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于axios的vue插件,让http请求更简单
  • 前言-如何学习区块链
  • 悄悄地说一个bug
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 消息队列系列二(IOT中消息队列的应用)
  • 新手搭建网站的主要流程
  • 学习ES6 变量的解构赋值
  • 译有关态射的一切
  • (1)Android开发优化---------UI优化
  • (13):Silverlight 2 数据与通信之WebRequest
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (poj1.3.2)1791(构造法模拟)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)图像的%2线性拉伸
  • (五)c52学习之旅-静态数码管
  • (新)网络工程师考点串讲与真题详解
  • .NET : 在VS2008中计算代码度量值
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET微信公众号开发-2.0创建自定义菜单
  • /var/log/cvslog 太大
  • @GetMapping和@RequestMapping的区别
  • @RequestMapping-占位符映射
  • [ SNOI 2013 ] Quare
  • [.net] 如何在mail的加入正文显示图片
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [C++] 统计程序耗时
  • [codeforces] 25E Test || hash