如何创建 Lua 自动处理表格的方法

how to create Lua methods that work with tables automatically

在 Lua 中,我看到一些方法,例如 stringio class 允许您自动调用 table 中的方法,无需为此实例化对象,例如:

以下代码:

local tb = {"Hello", "World!"}

table.concat(tb)

可以这样写:

local tb = {"Hello", "World!"}

tb:concat()

我试图创建一个可以做同样事情的方法:

local tst = {}

function tst:test()
     print("test")
end

但是下面的代码不起作用:

local tb = {"Hello", "World!"}

tb:test()

仅当我通知代码 tb = tst:

local tb = tst

tb:test()

我的问题是,我有什么方法可以像第二个示例那样自动创建使用字符串或 table 的方法,而无需实例化 class?比如,将我的 table 称为 table:MyMethod()

我不确定这是否回答了你最初的问题,但也许从评论中回答你的问题将有助于解释事情。

以下代码是您如何使用某些方法实例化 table 的示例。

local function makeArray()
  local a = {}
  setmetatable(a, {__index = table})
  return a
end

setmetatable 调用基本上使 table 库中的所有函数都可以从新数组访问。这很有用,因为除了 pack 之外的所有 table 函数都期望一个数组作为它们的第一个参数。

Vanilla Lua 对字符串做了类似的事情。所有字符串都有 {__index = string} 作为它们的元 table.

虽然代码可以缩短,但 luther 是正确的:

function makeArray()
  return setmetatable({}, {__index = table})
end