如何实现支持最多4个参数的Lua字符串join拼接函数?
完善Lua的join函数方案
嘿,我来帮你搞定这个join函数~你原来的代码逻辑顺序有点问题,比如先判断b == nil的话,当只传一个参数时,会错误地去拼接不存在的c和d,咱们换两种可靠的思路来实现:
方法一:用数组收集参数(最简洁通用)
这种方法不管传1-4个参数都能自动处理,逻辑清晰还不容易出错:
function join(a, b, c, d) local validArgs = {} -- 把所有非nil的参数加入数组 if a then table.insert(validArgs, a) end if b then table.insert(validArgs, b) end if c then table.insert(validArgs, c) end if d then table.insert(validArgs, d) end -- 用逗号拼接数组元素,自动处理各种参数数量 print(table.concat(validArgs, ", ")) end
测试效果:
- 仅传1个参数:
join("hello")→ 输出hello - 传2个参数:
join("hello", "world")→ 输出hello, world - 传3个参数:
join("a", "b", "c")→ 输出a, b, c - 传4个参数:
join("w", "x", "y", "z")→ 输出w, x, y, z
方法二:按参数数量依次判断(贴合你原来的思路)
如果你想坚持用分支判断的方式,必须调整判断顺序——要从参数最少的情况开始判断,否则逻辑会出错:
function join(a, b, c, d) if b == nil then -- 只有第一个参数a print(a) elseif c == nil then -- 有a和b两个参数 print(a .. ", " .. b) elseif d == nil then -- 有a、b、c三个参数 print(a .. ", " .. b .. ", " .. c) else -- 四个参数全传了 print(a .. ", " .. b .. ", " .. c .. ", " .. d) end end
这个方法的核心是从参数最少的情况先判断:比如当只传a时,b是nil,直接进入第一个分支;如果传了a和b,那b不为nil,但c是nil,进入第二个分支,以此类推,完美覆盖所有场景。
内容的提问来源于stack exchange,提问作者Renato D' Oyague
相关产品推荐
相关产品推荐

