如何使用变量名而不覆盖模块名?

时间:2019-07-19 13:12:20

标签: design-patterns lua

math.random()开箱即用,但是如果我将math设置为其他内容,则会破坏

local math = 1 + 1 -- set math to something else math.random() -- breaks

在设置math.random()时,有什么方法可以使local math = 1 + 1仍然工作?

我有一堆带有点标记功能的模块,例如coord.get()offset.get()

但是然后像coordoffset这样的基本词就不能用于变量名了,这很烦人

2 个答案:

答案 0 :(得分:2)

您始终可以再次要求该模块:

require("math").random()

由于模块已经被加载,所以这不是很昂贵。

答案 1 :(得分:1)

使用正确编写的模块,您可以local coords = require("coord")

这将创建一个局部变量coords,以便在以后的局部定义中为coord着色时,您仍然可以通过coords访问这些函数。如果模块不返回它创建的表,而仅在全局范围内创建表,则该表将不起作用。

如果math.random local random = math.random在您的local math变量之前定义,则可以使用相同的方法。

local random = math.random
local math = 1 + 1

print(random(math))

或者,您可以将整个lib放入这样的局部变量中:

local maths = math
local math = 1 + 1

print(maths.random(math))

这表示一个名为math的数字变量不太可能被很好地命名。给定您的示例,像product这样的名称会更合适。