美文网首页Kotlin开发指南简书人物Kotlin
19. 具名参数和变长参数、默认参数

19. 具名参数和变长参数、默认参数

作者: 厚土火焱 | 来源:发表于2017-11-15 14:12 被阅读26次

    在写程序的时候,有时我们无法提前预知会有多少个参数传入,这时就是变长参数用武的地方了。
    kotlin 的main 函数的数组参数,就是一个不定长度的参数,可以修改为变长参数。
    main 常见的样子是这样的

    fun main(args: Array<String>) {
    
    }
    

    我们使用变长参数可以让它变成这样

    fun main(vararg args: String) {
        
    }
    

    这两个写法,在其中填入相同的代码,以证明它们是一样的效果。

        for (arg in args){
            println(arg)
        }
    

    传入参数 1 3 5 7


    传入参数

    运行结果

    1
    3
    5
    7
    

    当我们传入参数的时候,可以不理会函数定义时参数的顺序,这就要用到具名参数了。

    fun Hello(vararg ints:Int, str:String){
        println(str)
        ints.forEach(::println)
    }
    

    调用这个函数


    因为变长参数,最后一个参数不识别了

    我们使用具名参数来解决这个问题

    Hello(1,3,5,7,9,str = "爱你")
    

    变长参数也可以用另一种方式给入参数的

        var arr = intArrayOf(1,3,5,7,9)
        Hello(*arr, str = "a")
    

    这只适用于Int数组。
    如果参数调用时没有传入某些参数,而我们想给这些没有传入的参数一个默认值的话,需要设置默认参数

    fun Hello(vararg ints:Int, str:String = "想你"){
        println(str)
        ints.forEach(::println)
    }
    

    str:String = "想你" 就是默认参数了
    那么调用的地方可以写成

    Hello(1,3,5,7,9)
    

    运行结果就成了

    想你
    1
    3
    5
    7
    9
    

    需要注意的是,默认参数如果是第一个的参数位置,调用省略的话,后面的参数给入都要写成具名参数。例如

    fun main(vararg args: String) {
        var arr = intArrayOf(1,3,5,7,9)
        Hello(ints = *arr, str = "爱你")
    }
    
    fun Hello(ver:String = "3.0", vararg ints:Int, str:String){
        println(ver)
        println(str)
        ints.forEach(::println)
    }
    

    运行结果

    3.0
    爱你
    1
    3
    5
    7
    9
    

    相关文章

      网友评论

        本文标题:19. 具名参数和变长参数、默认参数

        本文链接:https://www.haomeiwen.com/subject/ydicvxtx.html