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
从 Lua 开始,如果
debug
库可用,您可以使用debug.getmetatable
和debug.setmetatable
来更改非表类型的元表。与任何元表一样,
__index
元方法可用于使对象响应键索引。一个粗略的例子。请注意,在
debug.getmetatable(0)
和中debug.setmetatable(0, mt)
,0
被选为任意数值。将任何数值传递给这些函数都可以访问该类型的元表。参见 Lua 5.4:2.1 - 值和类型| 2.4 - 元表和元方法| 6.10 - 调试库