You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中能否在三元条件语句中使用return语句?

Lua中无法用短路逻辑替代含return的if语句的原因及解决方案

为什么你的写法会报错

Lua里的and、or这类短路运算符只能接收表达式作为操作数,而return是用来终止函数执行的语句,不属于表达式范畴,所以直接把return i放在and后面会触发语法错误。

你尝试的(v == query) and (do return i end)同样不行,因为do ... end是代码块语句,也不能作为表达式被短路运算符处理——哪怕Lua允许do return end在代码块中间返回,它依然是语句而非表达式。

怎么简化代码(不增加if的冗余)

其实你原来的if写法已经足够简洁了,如果想压缩行数,直接写成一行就行,完全不影响可读性:

if v == query then return i end

这是Lua里处理这类场景最紧凑的合法写法,没必要强行用短路逻辑去替代——毕竟语法规则摆在这,硬凑反而会写出不符合规范、难读的代码。

可运行的完整代码

find = function(self, query)
    for i, v in pairs(self) do
        if v == query then return i end
    end
    return nil
end

test = {"lime", "grape", "kiwi"}
print(find(test, "kiwi")) -- 输出:3

内容的提问来源于stack exchange,提问作者Toshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:45:26