在Lua中更改元表会破坏冒号操作符。
2013-8-11 6:43:33
收藏:0
阅读:146
评论:2
学习 Lua 时,我从这里借用了一些代码来使用字符串索引,它就是这样的:
getmetatable("").__index = function(str, i) return string.sub(str, i, i) end
之后,我写了一个函数来练习翻转字符串。
function reverse_string(str)
local s = ""
for i = string.len(str), 1, -1 do s = s .. str[i] end
return s
end
这个函数很好用,直到我把string.len(str)改成 str:len(),然后我就收到了这个错误:
reverse.lua:9: bad argument #2 to 'sub' (number expected, got string)
调试输出告诉我__index函数正在str:len()上被调用,而且i参数变成了字符串“len”。我知道str:len()在没有metatable的情况下是有效的,但是一旦我加入metatable就会出现这种情况,为什么?
点赞
用户2406646
getmetatable("").__index = function(str, key)
if type(key) == "string" then
return string[key]
else
return string.sub(str, key, key)
end
end
str = "hello, world!"
print(str:len())
print(str[5])
index 函数会接收到表和键值作为参数,因此在本例中, str 代表字符串,i 则代表键值。因为 len 不在元表中,所以调用了 __index 并以字符串作为第一个参数,以键值 ("len") 作为第二个参数。需要检查 i 的类型以更好地处理字符串。请参考 这里 获取更多信息。
2013-08-11 04:08:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
从Lua 5.2参考手册:字符串操作中翻译如下:
因此,像
str:len()这样的面向对象风格来自于默认的元方法__index,您可以对其进行修改。