因此,我必须编写一个函数联接(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个论点,请帮助
发布于 2018-03-17 02:29:04
可以通过大多数编程语言所称的“默认/可选参数”来实现您所要寻找的内容。但是,Lua的做法似乎略有不同--只有实际上需要参数(如果您在函数中实际使用了它)(而不是用条件检查来代替它)--所以您的方法实际上是正确的,只是缺少了一点条件魔术。按照以下方式重写程序,您将发现该函数可以满足您的需要:
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-块而不是if- not块。这主要是为了使“控制流”能够检查是否存在最后3个参数中的任何一个。您可能需要进一步阅读“控制流”和“条件”。
注意:将print替换为io.write,因为:
io.write不会在输出的末尾追加换行符,所以您可以在同一行上打印单词,只有逗号和空格分隔。进一步参考:
发布于 2018-03-17 07:37:17
如果只连接和打印这些字符串输入,甚至不需要为参数指定名称:
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")https://stackoverflow.com/questions/49331707
复制相似问题