有没有办法在Lua中使用i++
代替i = i + 1
? 我认为这可能是因为Lua可以直接使用C函数。
答案 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)
。