所以我必须写一个函数join(a,b,c,d),它最多需要4个字符串,并用逗号连接起来。当给定少于4个字符串时,该函数仍然可以工作,包括只给出一个没有逗号的字符串,只给出一个字符串作为参数。但是,我只能使用3
function join(a,b,c,d)
if b == nil then
print(a .. ", " .. c .. ", " .. d)
elseif c == nil then
print(a .. ", " .. b .. ", " .. d)
elseif d == nil then
print(a .. ", " .. b .. ", " .. c)
else
print(a .. ", ".. b .. ", " .. c .. ", " .. d)
end
end
我不知道如何让它少于3个参数,请帮助
答案 0 :(得分:5)
如果你只连接并打印这些字符串输入,你甚至不需要给参数命名:
local function join(...)
print(table.concat({...}, ", ")
end
join("a")
join("a","b")
join("a","b","c")
join("a","b","c","d","e","f","blah-blah","as many as you want", "even more")
答案 1 :(得分:2)
您可以通过大多数编程语言调用"默认/可选参数来实现您正在寻找的内容。"然而,Lua似乎有点不同 - 只有实际需要参数,如果你在函数中实际使用它(没有用nil的条件检查包围它) - 所以你的方法实际上是正确的,只是缺少一点条件魔法。按如下方式重写您的程序,您将发现该功能可以满足您的需求:
function join(a,b,c,d)
io.write(a)
if b ~= nil then
io.write(", " .. b)
end
if c ~= nil then
io.write(", " .. c)
end
if d ~= nil then
io.write(", " .. d)
end
end
join('test')
join('test', 'test1')
join('test', 'test1', 'test2')
join('test', 'test1', 'test2', 'test3')
在此处测试代码:https://jdoodle.com/a/qoc
关于版本更改的重要说明:请注意它是如何阻止if-blocks而不是if-else阻止。这主要是启用"控制流"检查是否存在最后3个参数。您可能希望进一步阅读"控制流"和"条件。"
注意:将print
替换为io.write
因为:
io.write
默认情况下不会在其输出的末尾添加换行符,因此您可以在同一行打印出单词,仅用逗号和空格分隔。进一步参考: