在 JavaScript 中,您可以创建一个可调用的对象,如下所示:
const prox = new Proxy(function() {}, {
get(target, key) { return true }
apply(target, that, argList) { console.log('This came from a proxy') }
})
prox() // This came from a proxy
console.log(prox.name) // true
我希望有一个与我正在开发的函数类似的东西,它有一个可以调用的方法。
local function describe()
-- ...
end
function describe.skip()
-- ...
end
这不起作用,因为函数不是表。
理想情况下这是可能的:
local describe = {}
function describe.__apply()
-- ...
end
function describe.skip()
-- ...
end
describe()
describe.skip()
__call
元方法表现得像函数。
每当关联表被调用时,就会调用 __call
元方法,就好像它是一个函数一样。例如:
local describe = setmetatable({}, {
__call = function (self)
print('describe() called', self)
end
})
function describe.skip()
print('describe.skip() called')
end
describe()
describe.skip()
describe() called table: 0x5570496f0890
describe.skip() called
此外,和__newindex
可用于创建完整的代理。
另请参阅