Scala 中的 ?0 类型是什么?
What is the ?0 type in Scala?
scala> Try(Class.forName("scala.util.Try"))
warning: there was one feature warning; re-run with -feature for details
res54: scala.util.Try[Class[?0]] forSome { type ?0 } = Success(class scala.util.Try)
谁能解释一下 ?0
类型是什么?当我尝试在代码中使用它时,无法编译。
val tryMongo: Try[Class[?0]] = Try(Class.forName(MONGO_COLLECTION_CLASS))
这通常出现在 existential type,所以尝试:
scala> val tryMongo: Try[Class[`?0`]] forSome { type `?0`} = Try(Class.forName("scala.util.Try"))
tryMongo: scala.util.Try[Class[?0]] forSome { type ?0 } = Success(class scala.util.Try)
请注意,您可以选择任何名称,例如 T
或 A
而不是 ?0
- 这只是编译器消息的约定(选择 ?
可能是因为Java 中使用相同的符号)。您还可以使用快捷方式 XXX[_]
,它完全等同于 XXX[T] forSome { type T }
:
scala> val tryMongo: Try[Class[_]] = Try(Class.forName("scala.util.Try"))
tryMongo: scala.util.Try[Class[_]] = Success(class scala.util.Try)
scala> Try(Class.forName("scala.util.Try"))
warning: there was one feature warning; re-run with -feature for details
res54: scala.util.Try[Class[?0]] forSome { type ?0 } = Success(class scala.util.Try)
谁能解释一下 ?0
类型是什么?当我尝试在代码中使用它时,无法编译。
val tryMongo: Try[Class[?0]] = Try(Class.forName(MONGO_COLLECTION_CLASS))
这通常出现在 existential type,所以尝试:
scala> val tryMongo: Try[Class[`?0`]] forSome { type `?0`} = Try(Class.forName("scala.util.Try"))
tryMongo: scala.util.Try[Class[?0]] forSome { type ?0 } = Success(class scala.util.Try)
请注意,您可以选择任何名称,例如 T
或 A
而不是 ?0
- 这只是编译器消息的约定(选择 ?
可能是因为Java 中使用相同的符号)。您还可以使用快捷方式 XXX[_]
,它完全等同于 XXX[T] forSome { type T }
:
scala> val tryMongo: Try[Class[_]] = Try(Class.forName("scala.util.Try"))
tryMongo: scala.util.Try[Class[_]] = Success(class scala.util.Try)