在 Swift 中,您可以使用扩展向现有类型添加方法,而在 JavaScript 中,您可以使用原型执行相同的操作。如何在Lua中实现类似的功能?
我想为数字添加钳位功能。
如果不可能,请告诉我。
debug
库可用,您可以使用 debug.getmetatable
和 debug.setmetatable
更改非表类型的 metatables。
__index
元方法可用于使对象响应键索引。
一个粗略的例子:
local mt = debug.getmetatable(0) or {}
local methods = {}
mt.__index = methods
function methods:clamp(lower, upper)
if lower > self then return lower end
if upper < self then return upper end
return self
end
debug.setmetatable(0, mt)
for i = 1, 5 do
local n = math.random(100)
print(n, n:clamp(33, 66))
end
88 66
48 48
46 46
20 33
70 66
参见 Lua 5.4:2.1 - 值和类型 | 2.4 – 元表和元方法 | 6.10 – 调试库