我如何在 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)
。
有没有办法在 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)
。