19. 具名参数和变长参数、默认参数
2017-11-15 本文已影响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