Lua覆盖字符串#

前端之家收集整理的这篇文章主要介绍了Lua覆盖字符串#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正试图在Lua中使用我自己的长度方法来处理字符串.
我已成功覆盖了字符串的len()方法,但我不知道如何为#manrator执行此操作.

  1. orig_len = string.len
  2. function my_len(s)
  3. print(s)
  4. return orig_len(s)
  5. end
  6.  
  7. string.len = my_len
  8. abc = 'abc'

如果我打电话:

  1. print(abc:len())

输出

  1. abc
  2. 3

  1. print(#abc)

输出’3′,这意味着它称为原始长度函数而不是我的.有没有办法让#调用我的长度函数

解决方法

I’m trying to imlement my own length method for strings in Lua.

你不能从Lua做到这一点.

您需要修改Lua源,特别是虚拟机(lvm.c)并更改其对操作码OP_LEN的处理.在Lua 5.2中,您需要更改luaV_objlen以在获取字符串的实际长度之前检查元方法

  1. case LUA_TSTRING: {
  2. tm = luaT_gettmbyobj(L,rb,TM_LEN); // <--- add this line
  3. if (!ttisnil(tm)) // <--- add this line
  4. break; // <--- add this line
  5. setnvalue(ra,cast_num(tsvalue(rb)->len));
  6. return;
  7. }

但这似乎是操作符超载滥用,如超载意味着分裂或某事.

猜你在找的Lua相关文章