0

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

4

2 回答 2

6

表构造函数评估为表1

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

考虑如果 Lua 使用与 JavaScript 相同的语法,那么它将是

t = {x: 2}   -- invalid syntax, for argument

并且“清楚”x: 2不是变量赋值而是字段初始值设定项。当然,Lua 语法规定它写为t = {x = 2},但区分的想法是成立的。有两种不同的构造,{x = 2}表构造器不会导致副作用或变量赋值。


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

另请注意,Lua对(赋值)语句和表达式的分离比 C 之类的语言更强。

于 2012-11-23T06:03:50.933 回答
3

如果表构造函数不是表达式,那么您不能它们分配给任何东西。该语句variable_name = {}将表达式(在本例中为表构造函数)的结果分配给变量。

表是值,就像数字、字符串、函数、用户数据以及 Lua 中所有其他的值一样。表达式计算为值。因此,表的构造是一个计算值的表达式。

于 2012-11-23T06:04:10.857 回答