Misc.kts包含:
class E
fun <B> foo(): B {
return E() // <--- Error here
}
fun bar() {
val r = foo<E>()
}
错误是Type mismatch: inferred type is Misc.E, but B was expected
。这种编译器行为使我感到惊讶。谢谢您的解释。
答案 0 :(得分:6)
您可以将通用函数视为函数的Cookie切割器。对于B
的任何值,您的通用函数定义都可以标记出不同的函数cookie。
B
有一个值可以使return E()
合法。那时B
是E
,通话中也是如此foo<E>()
。但是,这是 only 这种情况。如果我致电foo<Int>()
,该怎么办?当期望E()
时,您将无法返回Int
。
要使函数定义有效,仅存在一个与B
兼容的返回值是不够的。您返回的值必须与B
的所有个可能值兼容。