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

时间:2015-05-09 09:30:01

标签: lua

有没有办法在Lua中使用i++代替i = i + 1我认为这可能是因为Lua可以直接使用C函数。

2 个答案:

答案 0 :(得分:4)

您必须修改解析器以接受++,因为它不是语法的一部分。不过,创建一个新的不兼容的Lua方言只是为了节省一些字符是不值得的。

为此定义某种函数也无法正常工作,因为Lua中的函数是按值传递的,因此您必须编写

i = incr(i)

这几乎打败了这一点,并且不允许你表达++i

也许你可以做incr 'variableName'并搞乱调用函数的本地环境...但是,这只是过于复杂,不值得麻烦,而且通常是一种可想而知的可怕想法。

答案 1 :(得分:3)

如果您想避免输入内容,请查看您的编辑是否可以为您++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现在需要i(0)