如何在Lua中实现无变量声明的匿名表元素直接返回函数
极简Lua版本查询函数实现
最初的尝试
我原本想写一个极简函数,直接返回匿名表指定位置的值,写法如下:
function RL_MyTool:Version(n) return {"0.4.0", "20221003-0230", "13.5.5"}[n] end
但这种写法在Lua中不被允许。
替代实现方案
我随即想到两种替代写法,功能一致,都能在未传参时返回默认值:
方案1
function RL_MyTool:Version(n) local t = {"20221003-0230", "13.5.5"} return t[n] or "0.4.0" end
方案2
function RL_MyTool:Version(n) local n, t = n or 1, {"0.4.0", "20221003-0230", "13.5.5"} return t[n] end
最终优化实现
后来基于@Piglet的回答,我优化出了更简洁的写法,既避免了值重复,又不用额外变量声明:
function RL_MyTool:Version(n) return ({"0.4.0", "20221003-0230", "13.5.5"})[n or 1] end
这种写法完全符合最初的极简设想,函数内没有任何额外变量或表声明,同时保留了默认值逻辑,易用性和可维护性都更好。
无需表的实现技巧
如果不想用表,也可以利用Lua的select函数结合多返回值实现:
function RL_MyTool:Version(n) return select(n or 1, "0.4.0", "20221003-0230", "13.5.5") end
select(index, ...)会返回可变参数中第index个位置的值,未传参时默认取第一个,同样能满足需求,代码也足够简洁。
内容的提问来源于stack exchange,提问作者Rai
相关产品推荐
相关产品推荐

