如何创建可自动使用表的Lua方法

问题描述

在Lua中,我看到了一些方法,例如stringio类,这些类使您可以自动从表中调用方法,而无需为此实例化对象,例如: / p>

以下代码

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

解决方法

我不确定这是否能回答您的原始问题,但是也许可以从评论中回答您的问题将有助于解释问题。

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

model_lib_v2.py

local function makeArray() local a = {} setmetatable(a,{__index = table}) return a end 调用基本上使setmetatable库中的所有函数都可以从新数组访问。这很有用,因为除table以外的所有table函数都希望将数组作为其第一个参数。

Vanilla Lua对字符串做类似的事情。所有字符串都以pack作为它们的元表。

, 尽管可以缩短代码,但

路德还是很重要的>

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