我正试图在Lua中使用我自己的长度方法来处理字符串.
我已成功覆盖了字符串的len()方法,但我不知道如何为#manrator执行此操作.
我已成功覆盖了字符串的len()方法,但我不知道如何为#manrator执行此操作.
- 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)
解决方法
I’m trying to imlement my own length method for strings in Lua.
你不能从Lua做到这一点.
您需要修改Lua源,特别是虚拟机(lvm.c)并更改其对操作码OP_LEN的处理.在Lua 5.2中,您需要更改luaV_objlen以在获取字符串的实际长度之前检查元方法:
- case LUA_TSTRING: {
- tm = luaT_gettmbyobj(L,rb,TM_LEN); // <--- add this line
- if (!ttisnil(tm)) // <--- add this line
- break; // <--- add this line
- setnvalue(ra,cast_num(tsvalue(rb)->len));
- return;
- }
但这似乎是操作符超载滥用,如超载意味着分裂或某事.