为什么表构造函数被认为是"表达式"?

Igo*_*rio 0 lua

从表面上看,变量赋值和表构造函数做了类似的事情.那么为什么表构造函数被认为是"表达式"而变量赋值被认为是"语句"?

小智 6

表构造函数评估表1

=表构造函数中的"赋值"(符号)仅仅是用于初始化表中字段的语法 - 它们不是变量赋值.语法看起来与之类似=,但这只是表面上的相似之处:不要混淆两种不同的语法结构.

考虑一下Lua是否使用了与JavaScript相同的语法,那么它就是

t = {x: 2}   -- invalid syntax, for argument
Run Code Online (Sandbox Code Playgroud)

并且它将是"清除",x: 2不是变量赋值而是字段初始值设定项.当然,Lua语法规定它被写为t = {x = 2},但区别思想成立.有两种不同的结构,{x = 2}表构造函数不会导致副作用或变量赋值.


1如果不能分配表格供以后使用,那就没有多大意义了!由于只有表达式可以出现在赋值的右侧,因此表构造函数必须是表达式,因此结果表(它们是值)可以分配给变量(或传递给函数等).

还要注意Lua 与( C)之类的语言有更强的(赋值)语句和表达式分离.