[英]Kotlin inline function call vs function call with default type argument
考虑以下代码:
fun foo(type: Class<out Any> = Any::class.java) {
}
inline fun <reified T : Any> foo() {
}
fun main() {
foo() // ERROR!
}
此代码导致以下错误:
类型推断失败:没有足够的信息来推断inline fun foo()中的参数T :单位
请明确指定。
为什么编译器不使用默认参数默认为非内联 function?
每当我们调用 function 并且有多个重载都匹配时,Kotlin 更喜欢它认为最具体的重载。 例如,它更喜欢 function 接收更具体的参数类型(子类型)而不是更通用的类型(超类型)。
类似地,如果编译器必须用默认值替换缺少的 arguments,它会认为它不太完全匹配。 它更喜欢我们使用 arguments 的候选者,就像在 function 定义中一样。 这在文档中有所描述:
对于每个候选,我们计算调用中未指定的默认参数的数量(即,我们使用默认值的参数的数量)。 具有最少数量的未指定默认参数的候选者是更具体的候选者;
https://kotlinlang.org/spec/overload-resolution.html
函数是否内联、它们是否使用具体参数或类型参数是否未知都无关紧要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.