如何创建 Lua 自动处理表格的方法
how to create Lua methods that work with tables automatically
在 Lua 中,我看到一些方法,例如 string
和 io
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
在 Lua 中,我看到一些方法,例如 string
和 io
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