Los datos locales están en la pila y, por lo tanto, tienen acceso a ellos más rápido. Sin embargo, dudo mucho que el tiempo de llamada a la función setmetatable
sea realmente un problema importante para algún programa.
Estas son las posibles explicaciones para esto:
prevención de la contaminación del medio ambiente mundial. La convención moderna de Lua para módulos es no hacer que se registren directamente en la tabla global. Deben construir una tabla local de funciones y devolverlas. Por lo tanto, el único forma de acceder a ellos es con una variable local. Esto fuerza un número de cosas:
Un módulo no puede sobrescribir accidentalmente las funciones de otro módulo.
Si un módulo hace esto accidentalmente, las funciones originales en la tabla devuelta por el módulo seguirán estando accesibles. Solo mediante el uso de local modname = require "modname"
tendrá la garantía de obtener exactamente y solo lo que expuso ese módulo.
Los módulos que incluyen otros módulos no pueden interferir entre sí. La tabla que obtiene de require
es siempre lo que almacena el módulo.
Una optimización prematura por alguien que leen "local
variables se accede más rápido" y luego decidieron hacer todo lo local
.
En general, esta es una buena práctica. Bueno, a menos que sea por # 2.
Es posible que desee echar un vistazo a http://stackoverflow.com/questions/4643814/why-would-this-lua-optimization-hack-help –