如何在Lua中使用C语言中的i++和++i?

有没有一种方法可以在 Lua 中使用 i++ 而不是 i = i + 1?我认为可能是可能的,因为 Lua 可以直接使用 C 函数。

点赞
用户929510
用户929510

你需要修改解析器才能接受 ++,因为它不是 Lua 语法的一部分。但是,仅仅为了省下一些字符就创建一个不兼容的 Lua 方言是不值得的。

定义某种类型的函数也不能通用,因为在 Lua 中,函数是按值传递的,所以你必须写成:

i = incr(i)

这几乎失去了意义,并且也不能让你表达 ++i

也许你可以尝试 incr 'variableName' 并且对调用函数的本地环境进行修改...但是,同样是过于复杂,不值得麻烦,而且基本上是一种每个人都可以想象到的可怕想法。

2015-05-09 14:42:06
用户2726734
用户2726734

如果你想避免输入,可以查看你的编辑器是否可以将 ++i 扩展为 i = i + 1

如果你只是想使用一个不需要修改 Lua 源代码的 hacky 方式,那么可以使用 tables 来进行引用传递,__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 的“值”现在需要使用 i(0)

2015-05-09 18:18:55
用户11749583
用户11749583

虽然在 Lua 中默认情况下无法执行 i++++i,但可以将 i = i + 1 更改为 i += 1,这样更好。

2022-08-08 15:02:40