LUA: 不理解 a.x 和 a[x] 的区别?
2021-10-6 2:8:21
收藏:0
阅读:144
评论:2
正如 Lua 手册所说,对该语言不熟悉的新手很容易陷入认为 a.x 和 a[x] 更相似而不是不同的陷阱中。我也是这些新手中的一个,哈哈。请问有人能解释一下为什么 a.x 会返回 nil,但是 a[x] 会返回 10,a.x 会返回 nil 吗?
a ={}
x = "y"
a[x] = 10
print(a[x]) -- 对于 "y",返回 10
print(a.x) -- 对于 "x",返回 nil
print(a.y) -- 对于 "y",返回 10
说实话,我觉得我已经理解了上面代码的原理,但我真正想知道的是概念上的原因:
invitems = {}
name = string.lower(name)
invitems[name] = "weapon"
print(invitems[name]) ----> 返回 weapon
print(invitems.name) ----> 返回 nil
print(invitems.string.lower(name)) ----> 返回 weapon
原文链接 https://stackoverflow.com/questions/69458543
点赞
stackoverflow用户6879826
Lua中表访问的语法为<table>[<expression>]
。当使用方括号符号即 a[x]
访问表时,表达式x
首先被计算,然后x
的值作为表索引。
另一方面,a.x
是表访问a["x"]
的简化语法。此处,字符串"x"
被视为表索引。
考虑以下REPL中的交互:
> a = {}
> x = "y"
> a[x] = 10
> a.x
nil
> a[x]
10
> a["y"]
10
> a.y
10
通过a[x] = 10
,x
首先评估为值"y"
,因此访问a["y"]
的表,将其值存储在那里。但在此之前,表是空的。尝试访问a.x
相当于a["x"]
,在键为"x"
的a
中没有存储值,因此返回nil
。但请注意,您也可以使用存储的值10
来访问a["y"]
或者等价的a.y
。
或考虑上述交互的继续操作:
> a[1] = 42
> z = 1
> a[z]
42
> a.z
nil
> a["z"]
nil
> a["z"] = "forty-two"
> a.z
forty-two
> a[z]
42
现在,a[1]
将值42
分配给键为1
的表字段。给z
赋值为1
后,我们可以使用a[z]
访问表中的新值,因为z
等于1
。但是我们无法使用a.z
访问该值,因为没有与"z"
键匹配的表字段。在a["z"] = "forty-two"
之后,有一个钥匙为"z"
的值,现在可以看出,a.z
和a[z]
是表a
的完全不同成员。
2021-10-06 02:40:02
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
a[x]
是更基础的索引构造。a.x
是a['x']
的语法糖。因此,在a[x]
中,x
是变量名。在a.x
中,x
是一个字面字符串,与变量x
无关。