Lua:在这里可以使用冒号语法吗?

我经常运行这个函数来缩短字符串的名称:

function shorten(st)
  return string.sub(st,6)
end

function test(input)
  local h = shorten(input)
  print(""..h)
end

test("helloworld")

我想在这个上下文中像其它函数一样使用冒号写法,它们都像 _world():context():manager()_,而不是 manager(context(world()))。 我读到使用带有冒号的语法会将第一个参数传递给后面的参数,但这不起作用:

function shorten(st)
  return string.sub(st,6)
end

function test(input)
  local h = input:shorten()
  print(""..h)
end

test("helloworld")

有没有办法做到这一点?

原文链接 https://stackoverflow.com/questions/70973639

点赞
stackoverflow用户7396148
stackoverflow用户7396148

根据您使用的Lua版本,您可以将shorten简单地定义为 string.shorten

这是因为所有字符串的元表都引用了字符串库。这就是为什么将函数添加到string将使其可用于任何已定义的字符串。

function string.shorten(st)
  return string.sub(st,6)
end

function test(input)
  local h = input:shorten()
  print(h)
end

test("helloworld")

输出:

world


你的冒号语法的例子不是完全正确的。这是语法糖

someClassInstance:method("arg")

等价于

someClassInstance.method(someClassInstance, "arg")

您经常看到使用冒号语法来提高面向对象风格的Lua的可读性,并在这里的 Programing in Lua: 16 - Object-Oriented Programming 中描述。


顺便说一句:您对 print(""..h) 做法感到奇怪,因为它在功能上与仅执行 print(h) 相同,但更昂贵。

2022-02-03 15:09:45