如何评估函数调用链

时间:2015-08-24 02:14:19

标签: lua

...
print(a.b():c():d())
...

何时以及如何评估呼叫链?我看到两个选择:

  • 当解释器到达该行时,所以以后对print()的任何调用只适用于最后一个d()。
  • 当print()实际访问参数时,每次执行该行时都会评估整个链(所需的行为,BTW)。

1 个答案:

答案 0 :(得分:3)

每次执行该行时都会评估整个链。

通过将相关行提供给luac -l

来显示精确的说明集
1   [1] GETTABUP    0 0 -1  ; _ENV "print"
2   [1] GETTABUP    1 0 -2  ; _ENV "a"
3   [1] GETTABLE    1 1 -3  ; "b"
4   [1] CALL        1 1 2
5   [1] SELF        1 1 -4  ; "c"
6   [1] CALL        1 2 2
7   [1] SELF        1 1 -5  ; "d"
8   [1] CALL        1 2 0
9   [1] CALL        0 0 1
10  [1] RETURN      0 1

上面的代码假设a是一个全局变量。如果a是局部变量,则会略有不同。