美文网首页
Kotlin 具名参数&可变参数

Kotlin 具名参数&可变参数

作者: xiawe_i | 来源:发表于2018-01-29 18:55 被阅读1688次
    code in kotlin.jpg
    具名参数
    • 给函数的实参附上形参

    • 举例:

        fun sum(arg1: Int, arg2: Int) = arg1 + arg2
        
        sum(arg1 = 1, arg2 = 2)
      

    变长参数

    vararg 关键字,参数长度可变化

    • 某个参数可以接受多个值

        fun hello(vararg ints: Int) {
            ints.forEach(::println)
        }
        
         hello(1,2,3,4,5)
      
    • 因为在kotlin里有具名参数,所以可以不为最后一个参数,可以在参数列表里的任意位置(Java里只能是最后一个参数)

    • 如果传参数时有歧义,则需要使用具名参数 (当变长参数前面有参数时,如果编译器能识别出来可以不用具名参数传入了,如果在其后面有参数时,则要使用具名参数指定类型传入了)

       fun hello(double: Double, vararg ints: Int, string: String) {
           println(double)
           ints.forEach(::println)
           println(string)
       }
       
       hello(1.0, 1, 2, 3, 4, 5, string = "hello")
       
       double 编译器可以识别出来类型
       string 编译器提示使用具名参数传入
      

    Spread Operator

    • 只支持展开Array

    • 只用于变长参数列表的实参

    • 不能重载

        fun hello(double: Double, vararg ints: Int, string: String) {
            println(double)
            ints.forEach(::println)
            println(string)
        }
        
        val array = intArrayOf(1, 2, 3, 4, 5)
        hello(3.0, *array, string = "hello")
        
        array 前面加 *
      
    默认参数
    • 为函数参数指定默认值

    • 可以为任意位置的参数指定默认值

    • 传参时,如果有歧义,需要使用具名参数

        fun world(double: Double = 3.0, vararg ints: Int, string: String) {
            println(double)
            ints.forEach(::println)
            println(string)
        }
        
        world(ints = *intArrayOf(1, 2, 3, 4, 5), string = "world")
        第一个参数指定的默认参数,调用时可以省略不传 
        
        fun world(double: Double, vararg ints: Int, string: String = "world")
        world(3.0, *array)
        如果默认参数在最后一个,不会产生歧义

    相关文章

      网友评论

          本文标题:Kotlin 具名参数&可变参数

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