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

时间:2012-11-23 05:47:53

标签: lua

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

2 个答案:

答案 0 :(得分:6)

Table constructors评估表 1

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

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

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

并且“明确”x: 2 是变量赋值,而是字段初始值设定项。当然,Lua语法规定它写成t = {x = 2},但区别思想成立。有两个不同的结构,{x = 2}表构造函数导致副作用或变量赋值。


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

另请注意,Lua的版本为a stronger separation of (assignment) statements and expressions,而不是C语言。

答案 1 :(得分:3)

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

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