-3
...
print(a.b():c():d())
...
何時以及如何評估調用鏈?我看到兩種選擇:如何評估一系列函數調用
- 當解釋器到達線路時,所以以後任何print()函數都只能和最後一個d()一起工作。
- 當print()實際訪問參數時,每次執行該行時都會評估整個鏈(期望的行爲,順便說一句)。
...
print(a.b():c():d())
...
何時以及如何評估調用鏈?我看到兩種選擇:如何評估一系列函數調用
每次執行該行時都會評估整個鏈。
精確的指令集,是通過給予所討論的行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
是一個局部變量,則會略有不同。
不,我真的想要鏈條就像我寫的那樣。 – ZzZombo
1.「調用鏈」('a.b():c():d()')是一個不相干的分心:問題是'print'參數是否被多次評估。 2.你可以比你發佈問題的速度更快地進行測試。這是它在每種編程語言中的工作方式。 4.「口譯員」沒有「達到這條線」;詞法分析器到達該行,標記它,將標記提供給解析器,解析器然後發出字節碼。這是解釋的字節碼(請參閱:lhf的答案)。 – Mud