为什么我们可以使用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: attempt to call a nil value

这似乎不一致,我是否做错了什么,还是在Lua中调用方法的方式存在什么好的原因?

谢谢。

点赞
用户1442917
用户1442917

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

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

这应该会输出1。有关详细信息,请参见Lua手册中的2.46.4部分。

2020-12-14 02:46:58