【发布时间】:2019-09-04 04:19:49
【问题描述】:
我有一个带参数的类型别名,我想从一个方法返回不同参数类型的实例:
type TC[T] = (ClassTag[T], Option[T])
def gen(x: Int): TC[_] = x match {
case 0 => (classTag[Int], Option[Int](0))
case _ => (classTag[String], Option[String](""))
}
这不起作用并给我错误:
错误:类型不匹配; 找到 : (scala.reflect.ClassTag[_ >: Int with String], Option[Any]) 必需:TC[] (扩展为) (scala.reflect.ClassTag[$1], Option[_$1]) forSome { type _$1 }
并且我尝试使用Any而不是通配符_,还是不行:
def gen(x: Int): TC[Any]
在第 2 行:错误:类型不匹配; 发现:scala.reflect.ClassTag[Int] 必需:scala.reflect.ClassTag[Any] 注意:Int <: any trait classtag t>_ <: Any 之类的通配符类型。 (SLS 3.2.10) case _ => (classTag[String], Some("")) ^ 第 3 行:错误:类型不匹配; 找到:scala.reflect.ClassTag[String] 必需:scala.reflect.ClassTag[Any] 注意:String <: any trait classtag t>_ <: Any 之类的通配符类型。 (SLS 3.2.10)
如何做到这一点?
【问题讨论】:
标签: scala typeclass covariance existential-type singleton-type