具名参数
给函数的实参附上形参
-
举例:
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) 如果默认参数在最后一个,不会产生歧义