以下内容无法编译:
Worktime
错误是:
fun<T> doSomething(value: T, action: (value: T) -> String = Any::toString){
//do something
}
使其工作很容易:
Kotlin: Type mismatch: inferred type is KFunction1<Any, String> but (T) -> String was expected
但是,这让我想知道:lambda和KFunction之间有什么区别?为什么我们都需要?
还有一种更简单的方法来提供Any :: toString作为默认操作吗?
答案 0 :(得分:2)
代码无法编译的原因与lambda和KFunction之间的差异无关。它不会编译,因为参数必须是类型(T) -> String
的函数,而Any::toString
是类型(Any) -> String
的函数。
答案 1 :(得分:1)
当您使用<template>
<div>
<input :value="someValue" />
</div>
</template>
<script>
export default {
props: ['value']
}
</script>
获得任何函数(lambda或其他)引用时,您正在使用反射。 @change.native
是Kotlin环绕反射函数的方式。
关于使<div>
工作-有一种方法,但您可能不喜欢它:
::
答案 2 :(得分:0)
如果这样做,它将被编译:
fun <T> doSomething(value: T, action: (value: Any) -> String = Any::toString) {
//do something
}
或
fun <T : Any> doSomething(value: T, action: (t: T) -> String = Any::toString) {
// ...
}