hlu*_*ico 10 default-arguments kotlin
我想知道如果要指定第二个参数的值,如何使用默认参数调用函数.在下面的简单示例中,我展示了addTwo()接受两个参数.'first'参数有一个默认值,但'second'没有.如何调用此函数指定我要使用'first'的默认值,给定值为2的'second'?
调用addTwo(2)会抛出错误.
fun main(args: Array<String>) {
var sum = addTwo(1,2) // works fine
var nextSum = addTwo(2) // ERROR: No value passed for parameter second
}
fun addTwo(first: Int = 0, second: Int): Int {
return first + second
}
Run Code Online (Sandbox Code Playgroud)
Jay*_*ard 29
这是一个错误,因为Kotlin不知道你为什么省略了第二个参数.该first可以默认,但没有second.因此,当您只传入一个参数时,它就是参数first.错误消息确切地说明了问题所在:
没有为参数second传递值
在第一个要保留为空的默认参数之后,必须使用命名参数调用任何内容.对于您的情况,这将是:
addTwo(second = 2) // first defaulted to 0
Run Code Online (Sandbox Code Playgroud)
如果你的默认参数是在另一个顺序,你的电话会很好.
fun addTwo(first: Int, second: Int = 0): Int{
return first + second
}
addTow(2) // no error, second defaulted to 0
Run Code Online (Sandbox Code Playgroud)
如果两个参数的数据类型不同,您会看到一个不同的不太清楚的错误,让您知道第一个参数(Int)的类型,而不是第二个的类型(Date在下面的示例中):
fun something(first: Int = 0, second: Date): Date { ... }
something(Date()) // ERROR: Type mismatch: inferred type is java.util.Date but kotlin.Int was expected
Run Code Online (Sandbox Code Playgroud)
注意: 您可能会遇到同样的问题vararg:
只有一个参数可以标记为vararg.如果vararg参数不是列表中的最后一个参数,则可以使用命名参数语法传递以下参数的值
| 归档时间: |
|
| 查看次数: |
8709 次 |
| 最近记录: |