首页 > 解决方案 > 为什么我们可以做 str:split(",") 但不能做 tab:insert(val)?

问题描述

我们可以做任何一个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 中调用方法不同?

谢谢,

标签: stringmethodslualua-table

解决方案


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

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

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


推荐阅读