从表面上看,变量赋值和表构造函数似乎做了类似的事情。那么为什么表构造函数被认为是“表达式”而变量赋值被认为是“语句”?
问问题
131 次
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 回答