使用默认参数键入Kotlin函数的签名
假设我有:
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 }
然后我不能调用加法器(),也就是用默认参数调用add。
那么,有什么办法可以使::添加默认参数到invokeAdder,但仍然调用添加与adder()
,从而调用它的默认参数?
你可以创建一个你的add
的lambda,它将是无参数的函数, add
使用默认参数{ 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) }