Lua 中 JavaScript 的 proxy.apply 处理程序

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

在 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()
lua metaprogramming
1个回答
0
投票

函数的行为可能不像表,但表可以通过

__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
此外,

__index

__newindex
可用于创建完整的代理。

另请参阅

PIL 13.4.4 – 跟踪表访问,其中讨论了代理表。

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