Lua variable.functionName和variable[“functionName”之间的差异
我知道你可以通过直接使用这个名字来获取变量和调用函数Lua variable.functionName和variable[“functionName”之间的差异,lua,lua-table,Lua,Lua Table,我知道你可以通过直接使用这个名字来获取变量和调用函数 variable.functionName 或者使用名称作为字符串 variable["functionName"] or variable[functionNameString] 现在我的问题是: 在这些不同的方式中是否存在任何差异,或者它们是否完全可以互换 我对这里的性能非常感兴趣,但欢迎您提供任何启示。PUC Rio Lua 5.1字节代码 print(variable.functionName) print(variable["f
variable.functionName
或者使用名称作为字符串
variable["functionName"] or variable[functionNameString]
现在我的问题是:
在这些不同的方式中是否存在任何差异,或者它们是否完全可以互换
我对这里的性能非常感兴趣,但欢迎您提供任何启示。PUC Rio Lua 5.1字节代码
print(variable.functionName)
print(variable["functionName"])
print(variable[functionNameString])
是
main(14条指令,0xafe530处56字节)
0+参数,3个插槽,0个上限值,0个局部变量,4个常量,0个函数
1[1]获取全局0-1;打印
2[1]GETGLOBAL 1-2;变量
3[1]可获取的11-3;“函数名”
4[1]呼叫0 2 1
5[2]获取全局0-1;打印
6[2]GETGLOBAL 1-2;变量
7[2]可得性11-3;“函数名”
8[2]呼叫0 2 1
9[3]GETGLOBAL 0-1;打印
10[3]GETGLOBAL 1-2;变量
11[3]GETGLOBAL 2-4;函数名称字符串
12[3]可获取1 2
13[3]呼叫0 2 1
14[3]返回0 1
如您所见,前两行生成完全相同的字节码(因此需要相同的时间),而第三行具有额外的(全局)变量访问权限
第一行仅起作用,因为“functionName”
是有效的Lua标识符,而不是保留字。第2行和第3行对字符串键的格式没有限制。它们是相同的。发件人:
。。。为了表示记录,Lua使用字段名作为索引。该语言通过提供a.name
作为a[“name”]
的语法糖来支持这种表示
该列表由
luac-l-p
输出。
main <var.lua:0,0> (14 instructions, 56 bytes at 0xafe530)
0+ params, 3 slots, 0 upvalues, 0 locals, 4 constants, 0 functions
1 [1] GETGLOBAL 0 -1 ; print
2 [1] GETGLOBAL 1 -2 ; variable
3 [1] GETTABLE 1 1 -3 ; "functionName"
4 [1] CALL 0 2 1
5 [2] GETGLOBAL 0 -1 ; print
6 [2] GETGLOBAL 1 -2 ; variable
7 [2] GETTABLE 1 1 -3 ; "functionName"
8 [2] CALL 0 2 1
9 [3] GETGLOBAL 0 -1 ; print
10 [3] GETGLOBAL 1 -2 ; variable
11 [3] GETGLOBAL 2 -4 ; functionNameString
12 [3] GETTABLE 1 1 2
13 [3] CALL 0 2 1
14 [3] RETURN 0 1