variable.functionName和variable [“functionName”]之间的区别

时间:2015-04-17 09:47:21

标签: lua lua-table

我知道您可以直接使用名称来获取变量和调用函数

variable.functionName

或将名称用作字符串

variable["functionName"] or variable[functionNameString]

现在我的问题是: 这些不同方式是否存在任何差异,或者它们是否完全可以互换?

我最感兴趣的是这里的表现,但任何启蒙都是受欢迎的。

2 个答案:

答案 0 :(得分:4)

PUC-Rio Lua 5.1字节代码

print(variable.functionName)
print(variable["functionName"])
print(variable[functionNameString])

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

正如您所看到的,前两行生成完全相同的字节代码(因此花费相同的时间),而第三行具有额外的(全局)变量访问权。

第一行仅有效,因为"functionName"是有效的Lua标识符而不是保留字。第2行和第3行对字符串键的格式没有限制。

答案 1 :(得分:1)

他们是一样的。来自the manual

  

...为了表示记录,Lua使用字段名称作为索引。该语言通过提供a.name作为a["name"]的语法糖来支持此表示。