...
print(a.b():c():d())
...
何时以及如何评估呼叫链?我看到两个选择:
答案 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
是局部变量,则会略有不同。