Scala 定义自定义类型 - 类型不匹配错误
Scala Defining Custom Type - Type Mismatch Error
我正在做一个基本练习来理解 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(...) 就可以了。
你可以直接写
val g = (List(Seq(1, 2), Seq(3, 4), (Seq(5, 6))), "foo", "bar")
编译器会推断类型。您可以检查 g: MyType[Int]
编译。
你也可以
def TypeOf[F[_ <: AnyVal]] = new PartiallyAppllied[F]
class PartiallyAppllied[F[_ <: AnyVal]] {
def apply[A <: AnyVal](fa: F[A]) = fa
}
val g = TypeOf[MyType]((List(Seq(1, 2), Seq(3, 4), (Seq(5, 6))), "foo", "bar"))
g: MyType[Int]
我正在做一个基本练习来理解 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(...) 就可以了。
你可以直接写
val g = (List(Seq(1, 2), Seq(3, 4), (Seq(5, 6))), "foo", "bar")
编译器会推断类型。您可以检查 g: MyType[Int]
编译。
你也可以
def TypeOf[F[_ <: AnyVal]] = new PartiallyAppllied[F]
class PartiallyAppllied[F[_ <: AnyVal]] {
def apply[A <: AnyVal](fa: F[A]) = fa
}
val g = TypeOf[MyType]((List(Seq(1, 2), Seq(3, 4), (Seq(5, 6))), "foo", "bar"))
g: MyType[Int]