Lua中的#用于字符串覆盖。
2014-4-15 15:32:30
收藏:0
阅读:111
评论:2
我正在尝试在Lua中实现自己的字符串长度方法。
我已经成功地重写了字符串的len()方法,但我不知道如何做到这一点对于#运算符。
orig_len = string.len
function my_len(s)
print(s)
return orig_len(s)
end
string.len = my_len
abc = 'abc'
如果我调用:
print(abc:len())
输出如下:
abc
3
但是
print(#abc)
仅输出'3',这意味着它调用了原始的长度函数而不是我的函数。是否有一种方法可以让#调用我的长度函数?
点赞
用户501459
我正在尝试在Lua中实现自己的字符串长度方法。
你无法从Lua中完成这个操作。
你需要修改Lua源代码,特别是虚拟机(lvm.c),并更改其对操作码OP_LEN的处理方式。在Lua 5.2中,你需要更改luaV_objlen以在获取字符串的实际长度之前检查元方法:
case LUA_TSTRING: {
tm = luaT_gettmbyobj(L, rb, TM_LEN); // <--- 添加这一行
if (!ttisnil(tm)) // <--- 添加这一行
break; // <--- 添加这一行
setnvalue(ra, cast_num(tsvalue(rb)->len));
return;
}
但这看起来像是操作符重载滥用,就像重载+来表示除法或其他什么。
2014-04-15 16:00:19
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 的字符串中的
#运算符,即使使用元表也不行:__len元方法不适用于字符串。实际上,在 Lua 中没有任何覆盖任何运算符的概念。Lua 元方法是回调函数:当 Lua 不能自行处理时使用它们。因此,算术元方法不适用于数字,而长度元方法则不适用于字符串。
对于表格,情况是不同的,因为它们旨在在 Lua 中实现对象。