pon*_*tic 5 default-parameters kotlin
比方说我有:
fun addInvoker(adder: () -> Int = ::add): Int{
return adder()
}
fun add(num1:Int = 1, num2:Int = 1): Int{
return num1 + num2
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,因为:: add有两个参数,但addInvoker的签名要求它有零参数.但是,如果我将其更改为:
fun addInvoker(adder: (Int, Int) -> Int = ::add): Int{
return adder()
}
fun add(num1:Int = 1, num2:Int = 1): Int{
return num1 + num2
}
Run Code Online (Sandbox Code Playgroud)
然后我不能调用adder(),即使用默认参数调用add.
那么,有什么办法可以制作::将默认参数添加到invokeAdder但仍然调用add with adder()
,从而使用默认的args调用它?
你可以创建一个lambda add
,它将是无参数函数,并将add
使用其默认参数调用:{ add() }
.
完整代码:
fun addInvoker(adder: () -> Int = { add() }): Int {
return adder()
}
fun add(num1: Int = 1, num2: Int = 1): Int {
return num1 + num2
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin中,具有默认参数的函数在类型系统中没有特殊表示,因此唯一的选择是使包装器仅将部分参数传递给它们:
val add0: () -> Int = { add() }
val add1: (Int) -> Int = { add(num1 = it) }
val add2: (Int) -> Int = { add(num2 = it) }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
609 次 |
最近记录: |