【发布时间】:2020-10-02 06:58:03
【问题描述】:
我正在做一个基本的练习来理解 scala 用户定义的类型。考虑以下示例:
type MyType[T <: AnyVal] = (List[Seq[T]], String, String)
val g: MyType = (List(Seq(1, 2), Seq(3, 4), (Seq(5, 6))), "foo", "bar")
编译失败,类型错误:
type MyType takes type parameters
[error] val g: MyType = (List(Seq(1, 2), Seq(3, 4), (Seq(5, 6))), "foo", "bar")
但是,这会编译:
type MyType[T <: AnyVal] = (List[Seq[T]], String, String)
val g: MyType[Int] = (List(Seq(1, 2), Seq(3, 4), (Seq(5, 6))), "foo", "bar")
有没有办法让 Scala 可以自动确定类型而无需指定确切的参数类型?我知道我们可以执行以下功能:
import scala.reflect.ClassTag
def f1[T](lst: List[T])(implicit ev: ClassTag[T]) = {
lst.toArray
}
在这种情况下,我不需要显式调用 f1Int,我只需执行 f1(...) 即可。
【问题讨论】:
-
您的函数示例与您的问题没有任何关系。 Scala 可以推断类型,但如果你是显式的,你就必须对所有事情都显式。
标签: scala generics types scala-collections custom-type