关于Lua的冒号操作员

Jos*_*sef 1 oop lua lua-table

为什么这段代码失败(尝试调用方法'sort'(一个零值))

th> xyz = {1,2,3}                                                                      
th> xyz:sort()
Run Code Online (Sandbox Code Playgroud)

这虽然有效

th> table.sort(xyz)
Run Code Online (Sandbox Code Playgroud)

Yu *_*Hao 9

因为table默认情况下包含用于操作标准库提供的表的通用函数的表不在表的metatable中.实际上,除非明确指定,否则表没有metatable.

您可以手动执行此操作:

local xyz = {1,2,3}
local mt = { __index = table}
setmetatable(xyz, mt)
xyz:insert(2)
xyz:sort()
Run Code Online (Sandbox Code Playgroud)

  • 这与字符串类型的值形成对比,后者(在 Lua 的最新版本中)最初将标准字符串表作为 __index 元方法。 (2认同)