如何使用 Lua 中的方法扩展现有类型,类似于 Swift 扩展或 JavaScript 原型?

问题描述 投票:0回答:1

在 Swift 中,您可以使用扩展向现有类型添加方法,而在 JavaScript 中,您可以使用原型执行相同的操作。如何在Lua中实现类似的功能?

我想为数字添加钳位功能。

如果不可能,请告诉我。

lua
1个回答
0
投票

在 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 – 调试库

© www.soinside.com 2019 - 2024. All rights reserved.