如何在lua中重新制作:lower()

如何创建一个字符串元表 这样我就可以做到

local test = "HeLlO HoW ARE YoU"
print(test:lowercase())

但我不想使用默认的:lower() 或者string.lower(str) / lower(str)

字符串的元表是什么?

点赞
用户107090
用户107090

如果你只想重命名方法 lowercase,只需执行 string.lowercase=string.lower

2018-04-24 20:57:45
用户134758
用户134758

是的,向string添加新方法是另一种可能性。例如,这是一个返回相同字符串的方法。

function string.identity (self)
   local ret = {}
   for i=1,self:len() do
      local c = self:sub(i, i)
      table.insert(ret, c)
   end
   return table.concat(ret)
end
local test = "HeLlO HoW ARE YoU"
print(test:identity())

向内置对象附加新方法或修改现有方法的缺点是,如果您使用外部库,则可能会覆盖您的更改。因此,作为一个经验法则,我不倾向于这样做,但是您的情况可能有所不同。

2018-04-24 21:55:56
用户4984564
用户4984564

只需修改 string

没什么比这更容易了。

string.lowercase = string.lower

编辑:正如用户3125367指出的那样(感谢他),我的第二个答案不起作用,因为 setmetatable 在字符串中不起作用。虽然可以通过在表格中包装字符串并重定向方法调用来使其工作,但这似乎相当低效,只有Ruby程序员才会真正这样做。


最后我能给你的最好建议是:不要

Lua是按照它构建的方式进行构建的,添加自定义别名只会困惑读取您的代码的人。如果我在代码库中看到 :uppercase(),我会假设它以某种方式与 :upcase() 行为不同,并浪费时间寻找它真正的做法。

2018-04-25 12:40:43