fis*_*og1 5 lua metatable lua-table
如何#在Lua中更改表的长度operator(),手册建议__len在metatable中分配函数,然后将metatable分配给我想要覆盖的表,但是这不能按预期工作?我没有选择在C端覆盖它.
turtles = {1,2,3}
setmetatable(turtles, {__len = function(mytable) return 5 end})
print(#turtles)
--returns 3, should return 5
Run Code Online (Sandbox Code Playgroud)
你必须使用Lua 5.1.在__len上表元方法,因为Lua的5.2的支持.
在Lua 5.1参考手册中,如果操作数是表,则直接返回原始表长度.
"len":#操作.
Run Code Online (Sandbox Code Playgroud)function len_event (op) if type(op) == "string" then return strlen(op) -- primitive string length elseif type(op) == "table" then return #op -- primitive table length else local h = metatable(op).__len if h then -- call the handler with the operand return (h(op)) else -- no handler available: default behavior error(···) end end end
在Lua 5.2参考手册中,如果操作数是表,请检查__lenmetamethod是否可用.
"len":#操作.
Run Code Online (Sandbox Code Playgroud)function len_event (op) if type(op) == "string" then return strlen(op) -- primitive string length else local h = metatable(op).__len if h then return (h(op)) -- call handler with the operand elseif type(op) == "table" then return #op -- primitive table length else -- no handler available: error error(···) end end end
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |