我如何在 Lua 中使用 C 中的 i++ 和 ++i

How can I use i++ and ++i from C in Lua

有没有办法在 Lua 中使用 i++ 而不是 i = i + 1我觉得有可能,因为Lua可以直接使用C函数。

您必须修改解析器以接受 ++,因为它不是语法的一部分。但是,为了保存几个字符而创建一个新的不兼容的 Lua 方言是不值得的。

为此定义某种函数通常也行不通,因为 Lua 中的函数是按值传递的,因此您必须编写

i = incr(i)

这几乎违背了要点,无论如何也不会让你表达 ++i

也许您可以 incr 'variableName' 并弄乱调用函数的本地环境...但同样,这太复杂了,不值得这么麻烦,而且从各个方面来说都是一个可怕的想法。

如果您想避免打字,请查看您的编辑器是否可以为您将 ++i 扩展到 i = i + 1

如果您只是想要一种不涉及修改 Lua 源代码的 hacky 方式,那么表格将为您提供传递引用,并且 __call 元方法可以用作表达式或语句。

function num(v)
  local t = {v or 0}
  function postinc(t, i)
    local old = t[1]
    t[1] = t[1] + (i or 1)
    return old
  end
  setmetatable(t, {__call=postinc})
  return t
end


i = num()
print(i())  -- print(i++)
i()         -- i++
print(i(0)) -- print(i)

编写这样的代码永远不值得,访问 i 的 "value" 现在需要 i(0)