Lua中t.foo与t[foo]的区别是什么?
Lua中点语法与方括号语法的区别
先明确给定的代码上下文:
-- 定义表t t = {foo = "bar", bar = "foo"} -- 定义全局变量foo foo = "bar"
下面直接说明print(t.foo)和print(t[foo])的核心区别:
t.foo是按固定字符串键取值
点语法里的foo是字符串字面量,等价于写t["foo"],直接去表t里查找键为"foo"的条目,对应的值是"bar",所以打印结果为bar。t[foo]是按变量动态计算的键取值
方括号里的foo是一个变量,Lua会先读取这个变量的当前值(此处变量foo的值为"bar"),再去表t里查找键为"bar"的条目,对应的值是"foo",所以打印结果为foo。
补充两者的适用场景:
- 点语法仅支持符合Lua标识符规则的键名(不能包含空格、不能以数字开头等),写法简洁,适合键名固定且明确的场景。
- 方括号语法支持任意类型的键(字符串、数字、甚至其他表),还能通过变量、表达式动态生成键名,适合需要动态获取表中元素的场景。
内容的提问来源于stack exchange,提问作者Luatic
相关产品推荐
相关产品推荐

