Misc.kts包含:
class E
fun <B> foo(): B {
return E() // <--- Error here
}
fun bar() {
val r = foo<E>()
}
Run Code Online (Sandbox Code Playgroud)
错误是Type mismatch: inferred type is Misc.E, but B was expected。这种编译器行为使我感到惊讶。谢谢您的解释。
您可以将通用函数视为函数的Cookie切割器。对于的任何值B,您的通用函数定义都可以标记出不同的函数cookie。
有一个价值B可以使之return E()合法。那时B是E,通话中也是如此foo<E>()。但是,这是唯一的情况。如果我打电话foo<Int>()怎么办?E()当Int预期到时,您将无法返回。
为了使函数定义有效,仅存在一个与兼容的返回值是不够的B。您返回的值必须与的所有可能值兼容B。
| 归档时间: |
|
| 查看次数: |
32 次 |
| 最近记录: |