Lua如何实现字符串覆盖操作?

2026-04-27 16:541阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计288个文字,预计阅读时间需要2分钟。

Lua如何实现字符串覆盖操作?

我正在尝试在Lua中使用自定义的长度方法来处理字符串。我已经成功实现了字符串的len()方法,但不知道如何为它提供参数。

Lua如何实现字符串覆盖操作?

我正试图在Lua中使用我自己的长度方法来处理字符串.
我已成功覆盖了字符串的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)

仅输出’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以在获取字符串的实际长度之前检查元方法:

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; }

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

本文共计288个文字,预计阅读时间需要2分钟。

Lua如何实现字符串覆盖操作?

我正在尝试在Lua中使用自定义的长度方法来处理字符串。我已经成功实现了字符串的len()方法,但不知道如何为它提供参数。

Lua如何实现字符串覆盖操作?

我正试图在Lua中使用我自己的长度方法来处理字符串.
我已成功覆盖了字符串的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)

仅输出’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以在获取字符串的实际长度之前检查元方法:

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; }

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