4个参数的功能,可以少于4个

时间:2018-03-17 01:44:03

标签: lua

所以我必须写一个函数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个参数,请帮助

2 个答案:

答案 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因为:

  1. io.write默认情况下不会在其输出的末尾添加换行符,因此您可以在同一行打印出单词,仅用逗号和空格分隔。
  2. 供将来参考:正如these answers中的讨论所示,无论如何,io.write是首选的输出方法。
  3. 进一步参考:

    • 查看this discussion about "default/optional arguments"及其等效的lua。因为你实际上没有任何"默认"值得一提的是,对于你的可选参数,仅仅检查它们的零条件就足够了。通常,您可能希望使用"默认"虽然价值很高,但讨论会详细介绍如何在Lua中这样做。