【问题标题】:Why can we do str:split(",") but not tab:insert(val)?为什么我们可以做 str:split(",") 但不能做 tab:insert(val)?
【发布时间】:2021-03-24 17:34:55
【问题描述】:

我们可以使用string.split("1,2,3",",")("1,2,3"):split(",") 并获得相同的结果。

但是tab = {} table.insert(tab, "hi") 有效,而tab = {} tab:insert("hi") 抛出错误

tab = {} tab:insert("hi"):1: 尝试调用一个 nil 值

这似乎不一致,我做错了什么还是有充分的理由在 Lua 中调用方法不同?

谢谢,

【问题讨论】:

    标签: string methods lua lua-table


    【解决方案1】:

    这是因为字符串在 Lua 中有一个默认的元表,而表没有。您可以自己设置元表:

    local tab = setmetatable({}, {__index = table})
    tab:insert("hi")
    print(#tab)
    

    这应该打印 1。有关详细信息,请参阅 Lua 手册中的 2.46.4 部分。

    【讨论】:

    • 哇,非常感谢!!!作为后续,是否可以将其设置为所有表的全局行为?
    • 我认为表格不可能(至少在不调整源代码的情况下是不可能的),但也许其他人也可以对此发表评论。
    • 我正在做一些实验并阅读文档。虽然不确定是否要修改基表元数据,但我能够创建一个新的基表对象,我可以向其添加其他行为并作为我的基础工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多