具有默认参数的 Kotlin 函数的类型签名
Type signature for Kotlin function with default parameters
假设我有:
fun addInvoker(adder: () -> Int = ::add): Int{
return adder()
}
fun add(num1:Int = 1, num2:Int = 1): Int{
return num1 + num2
}
我得到一个错误,因为 ::add 有两个参数,但 addInvoker 的签名要求它有零个参数。但是,如果我将其更改为:
fun addInvoker(adder: (Int, Int) -> Int = ::add): Int{
return adder()
}
fun add(num1:Int = 1, num2:Int = 1): Int{
return num1 + num2
}
然后我无法调用 adder(),即使用其默认参数调用 add。
那么,有什么方法可以使 ::add 成为 invokeAdder 的默认参数,但仍然使用 adder()
调用 add,从而使用默认参数调用它?
您可以为您的 add
创建一个 lambda,它将是无参数函数,并将使用其默认参数调用 add
:{ add() }
.
完整代码:
fun addInvoker(adder: () -> Int = { add() }): Int {
return adder()
}
fun add(num1: Int = 1, num2: Int = 1): Int {
return num1 + num2
}
在 Kotlin 中,带有默认参数的函数在类型系统中没有特殊表示,因此唯一的选择是让包装器只向它们传递部分参数:
val add0: () -> Int = { add() }
val add1: (Int) -> Int = { add(num1 = it) }
val add2: (Int) -> Int = { add(num2 = it) }
假设我有:
fun addInvoker(adder: () -> Int = ::add): Int{
return adder()
}
fun add(num1:Int = 1, num2:Int = 1): Int{
return num1 + num2
}
我得到一个错误,因为 ::add 有两个参数,但 addInvoker 的签名要求它有零个参数。但是,如果我将其更改为:
fun addInvoker(adder: (Int, Int) -> Int = ::add): Int{
return adder()
}
fun add(num1:Int = 1, num2:Int = 1): Int{
return num1 + num2
}
然后我无法调用 adder(),即使用其默认参数调用 add。
那么,有什么方法可以使 ::add 成为 invokeAdder 的默认参数,但仍然使用 adder()
调用 add,从而使用默认参数调用它?
您可以为您的 add
创建一个 lambda,它将是无参数函数,并将使用其默认参数调用 add
:{ add() }
.
完整代码:
fun addInvoker(adder: () -> Int = { add() }): Int {
return adder()
}
fun add(num1: Int = 1, num2: Int = 1): Int {
return num1 + num2
}
在 Kotlin 中,带有默认参数的函数在类型系统中没有特殊表示,因此唯一的选择是让包装器只向它们传递部分参数:
val add0: () -> Int = { add() }
val add1: (Int) -> Int = { add(num1 = it) }
val add2: (Int) -> Int = { add(num2 = it) }