如何创建自动与表格一起工作的Lua方法

在Lua中,我看到一些方法,例如“string”和“io”类,允许您自动从表格中调用该方法,而无需实例化此对象,例如:

下面的代码:

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()

我的问题是,是否有办法创建可以自动与字符串或表一起使用的方法,就像在第二个示例中一样,而无需实例化类? 像这样称呼我的表为表:MyMethod()

点赞
用户3574628
用户3574628

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

以下代码是实例化一个带有一些方法的表的示例。

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

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

对于字符串,Vanilla Lua 执行类似的操作。所有字符串都有 {__index = string} 作为它们的元表。

2020-08-14 02:51:19
用户13619683
用户13619683
luther is spot on although the code can be shortened:

虽然代码可以缩短,但是 Luther 的观点是正确的:

function makeArray()
  return setmetatable({}, {__index = table})
end
2020-08-14 06:39:29