首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小于4的4个参数的函数

小于4的4个参数的函数
EN

Stack Overflow用户
提问于 2018-03-17 01:44:02
回答 2查看 139关注 0票数 1

因此,我必须编写一个函数联接(a,b,c,d),它占用最多4个字符串,并将它们用逗号连接在一起。当给定的字符串少于4个时,该函数仍然可以工作,包括只打印一个字符串,当只给一个字符串作为参数时,没有附加逗号。但是,我只能让它与3一起工作

代码语言:javascript
复制
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个论点,请帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-17 02:29:04

可以通过大多数编程语言所称的“默认/可选参数”来实现您所要寻找的内容。但是,Lua的做法似乎略有不同--只有实际上需要参数(如果您在函数中实际使用了它)(而不是用条件检查来代替它)--所以您的方法实际上是正确的,只是缺少了一点条件魔术。按照以下方式重写程序,您将发现该函数可以满足您的需要:

代码语言:javascript
复制
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,因为:

  1. 默认情况下,io.write不会在输出的末尾追加换行符,所以您可以在同一行上打印单词,只有逗号和空格分隔。
  2. 供以后参考:正如这些答案中讨论的那样,无论如何,io.write是首选的输出方法。

进一步参考:

  • 查看关于“默认/可选参数”的讨论和它们的lua等价物。由于您实际上没有任何“默认值”,可以这样说,对于可选的参数,只需检查它们的零条件就足够了。通常,您可能希望使用“默认值”,而这种讨论将深入讨论如何在Lua中这样做。
票数 2
EN

Stack Overflow用户

发布于 2018-03-17 07:37:17

如果只连接和打印这些字符串输入,甚至不需要为参数指定名称:

代码语言:javascript
复制
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")
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49331707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档