能否为字符串类型实现运算符重载功能?

2026-04-01 19:311阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

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

能否为字符串类型实现运算符重载功能?

可以将伪原创的内容改写如下:

能否将自定义运算符和元方法添加到Lua字符串中?我希望实现这样的功能:使用`local str=test`,然后通过以下方式操作字符串:输出字符串第3个字符('e'),输出整个字符串('test'),输出字符串的相反数('TEST'),输出字符串连接('tset'),输出字符串乘以2('tester')。

是否可以将自己的运算符和元方法添加到Lua中的字符串中?

我希望做这样的事情:

local str = "test" print(str[2]) --> "e" print(str()) --> "TEST" print(-str) --> "tset" print(str + "er") --> "tester" print(str * 2) --> "testtest" 是的,在Lua中使用字符串的“秘密”元表,可以为字符串定义许多不同的运算符重载.

请尝试以下代码:

getmetatable('').__index = function(str,i) return string.sub(str,i,i) end getmetatable('').__call = function(str,i) return string.upper(str) end getmetatable('').__unm = function(str,i) return string.reverse(str) end getmetatable('').__add = function(str,i) return (str .. i) end getmetatable('').__mul = function(str,i) return string.rep(str, i) end local str = "test" print(str[2]) --> "e" print(str()) --> "TEST" print(-str) --> "tset" print(str + "er") --> "tester" print(str * 2) --> "testtest"

你不能使用setmetatable(”,…)的原因是因为它只能用在表上.但是通过上面的“hack”,您可以轻松地将不同的方法插入到字符串中.

如果确实需要,请记住仅在您自己的代码中本地使用它,因为在项目中全局使用它可能存在冲突.

然而,操纵字符串或数据的正确方法是使用模块中的方法.此示例中提供的元方法不是OOP友好的,并且在定义后影响Lua中范围内的所有字符串. Lua赋予我们编辑字符串metatable的能力,但我们应该负责使用它.

没有什么str:sub(),str:upper()和其他方法不能用这些在更改整个程序中字符串的元功能之前应该使用的示例.

能否为字符串类型实现运算符重载功能?

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

能否为字符串类型实现运算符重载功能?

可以将伪原创的内容改写如下:

能否将自定义运算符和元方法添加到Lua字符串中?我希望实现这样的功能:使用`local str=test`,然后通过以下方式操作字符串:输出字符串第3个字符('e'),输出整个字符串('test'),输出字符串的相反数('TEST'),输出字符串连接('tset'),输出字符串乘以2('tester')。

是否可以将自己的运算符和元方法添加到Lua中的字符串中?

我希望做这样的事情:

local str = "test" print(str[2]) --> "e" print(str()) --> "TEST" print(-str) --> "tset" print(str + "er") --> "tester" print(str * 2) --> "testtest" 是的,在Lua中使用字符串的“秘密”元表,可以为字符串定义许多不同的运算符重载.

请尝试以下代码:

getmetatable('').__index = function(str,i) return string.sub(str,i,i) end getmetatable('').__call = function(str,i) return string.upper(str) end getmetatable('').__unm = function(str,i) return string.reverse(str) end getmetatable('').__add = function(str,i) return (str .. i) end getmetatable('').__mul = function(str,i) return string.rep(str, i) end local str = "test" print(str[2]) --> "e" print(str()) --> "TEST" print(-str) --> "tset" print(str + "er") --> "tester" print(str * 2) --> "testtest"

你不能使用setmetatable(”,…)的原因是因为它只能用在表上.但是通过上面的“hack”,您可以轻松地将不同的方法插入到字符串中.

如果确实需要,请记住仅在您自己的代码中本地使用它,因为在项目中全局使用它可能存在冲突.

然而,操纵字符串或数据的正确方法是使用模块中的方法.此示例中提供的元方法不是OOP友好的,并且在定义后影响Lua中范围内的所有字符串. Lua赋予我们编辑字符串metatable的能力,但我们应该负责使用它.

没有什么str:sub(),str:upper()和其他方法不能用这些在更改整个程序中字符串的元功能之前应该使用的示例.

能否为字符串类型实现运算符重载功能?