人们常说应该在本地重新声明(某些)Lua 函数,因为这样可以减少开销。 但这背后的确切规则/原则是什么?我怎么知道哪些功能应该完成,哪些是多余的?还是应该为每个功能完成,甚至是您自己的功能?
不幸的是,我无法从 Lua 手册中弄清楚。
最佳答案
原理是,每次你写table.insert
时,Lua解释器都会在名为table<的表中查找
。实际上,这意味着 “insert”
条目_ENV.table.insert
- _ENV
是 Lua 5.2+ 中“全局变量”所在的位置。 Lua 5.1 有类似的东西,但它不叫 _ENV
。解释器在 _ENV
中查找字符串 "table"
,然后在该表中查找字符串 "insert"
。每次调用 table.insert
时,在实际调用函数之前进行两次表查找。
但是如果你把它放在一个局部变量中,那么解释器直接从局部变量中获取函数,这样会更快。它仍然需要查找它,以填充局部变量。
如果只在局部变量范围内调用一次函数是多余的,但这种情况很少见。对于已经声明为 local
的函数,没有理由这样做。它还使代码更难阅读,因此通常您不会这样做,除非它确实很重要(在运行很多次的代码中)。
关于performance - (内置)Lua 函数的本地声明以减少开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72025776/