scala 2.8中隐式转换的问题
发布时间:2020-12-16 08:58:00 所属栏目:安全 来源:网络整理
导读:我想写一个Tuple2 [A,B]到Seq [C]的隐式转换,其中C是A和B的超类型. 我的第一次尝试如下: implicit def t2seq[A,B,C](t: (A,B))(implicit env: (A,B) : (C,C)): Seq[C] = { val (a,b) = env(t) Seq(a,b)} 但它不起作用: scala (1,2): Seq[Int]console:7: er
我想写一个Tuple2 [A,B]到Seq [C]的隐式转换,其中C是A和B的超类型.
我的第一次尝试如下: implicit def t2seq[A,B,C](t: (A,B))(implicit env: (A,B) <:< (C,C)): Seq[C] = { val (a,b) = env(t) Seq(a,b) } 但它不起作用: scala> (1,2): Seq[Int] <console>:7: error: type mismatch; found : (Int,Int) required: Seq[Int] (1,2): Seq[Int] ^ 虽然这个工作: class Tuple2W[A,B](t: (A,B)) { def toSeq[C](implicit env: (A,C)): Seq[C] = { val (a,b) = env(t) Seq(a,b) } } implicit def t2tw[A,B)): Tuple2W[A,B] = new Tuple2W(t) 使用案例: scala> (1,2).toSeq res0: Seq[Int] = List(1,2) 我不知道为什么第一个解决方案没有按预期工作. 解决方法
您只需要使用<:<如果要限制的参数已经绑定在周围范围内(因为它们是在第二次尝试中),那么在您的情况下
implicit def t2seq[A <: C,B <: C,B)) = Seq(t._1,t._2) 足够了. 我猜你的第一次尝试不起作用,因为它对于类型推理器而言太复杂了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angular6:我希望我的继承组件具有父级的一些属性
- scala – 如何使Squeryl与Play一起工作!框架?
- 开发WebService两种开源工具CXF和Axis2的比较
- 泛型 – 通用类型统一:多个参数(T,T)与多个参数列表(T)(T)
- bash – 如何在UNIX中将“19-FEB-12”等字符串转换为纪元日
- 使用xfire快速发布WebService接口
- Angular Chrome – 同一个应用程序的两个标签会冻结两个HTT
- Angular2/RxJs什么时候应该取消订阅`Subscription`
- Angularjs代码/命名约定
- scala – 在Spark工作中写入HBase:存在类型的难题