scala - Scala 定义自定义类型 - 类型不匹配错误
问题描述
我正在做一个基本的练习来理解 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
}
在这种情况下,我不需要显式调用 f1 Int,我只需执行 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]
推荐阅读
- flutter - 如何将列表视图的焦点设置在聊天列表中的最后一项上
- gulp - GULP - 第一次有条件地运行任务,然后一直在监视(完成不是功能)
- solr - SOLR 与长文本数据查询的最佳实践
- python - 在写入 Csv 文件之前比较来自阵列中传感器的数据不起作用,Raspberry Pi
- java - BadSqlGrammarException: PreparedStatementCallback; 糟糕的 SQL 语法,当我给出时间戳参数时
- angular - 我怎样才能在没有按钮的情况下连接块,但是在盒子上的一个点上,我们可以将箭头从一个盒子拖到另一个盒子
- regex - Python正则表达式搜索模式或反向字符串
- angular - 构建角度库的正确方法是什么
- jsf - 对话框中的 PF 日历使 UiComponent#visitTree 中的 Java 属性为空
- excel - 尝试将工作表复制到电子邮件时出现错误