为什么我们可以做 str:split(",") 但不能做 tab:insert(val)?

Why can we do str:split(",") but not 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 中的调用方法不同有充分的理由?

谢谢,

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

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

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