Scala的类型不匹配错误试图查看参数化或抽象类的构造函数作为其上限

剥离下来的例子:

trait WithUpperBounds[AA[_] <: Set[_], Node, Edge] { val nodes: AA[Node] val edges: AA[Edge] } class WithoutUpperBounds[AA[_] <: Set[_], Node, Edge]( val nodes: AA[Node], val edges: AA[Edge] ) extends WithUpperBounds[AA, Node, Edge] { val nodes2Set: Set[Node] = nodes val edges2Set: Set[Edge] = edges }

REPL输出:

scala> :l …/Sandbox.scala Loading …/Sandbox.scala... defined trait WithUpperBounds <console>:10: error: type mismatch; found : AA[Node] required: Set[Node] val nodes2Set: Set[Node] = nodes ^ <console>:11: error: type mismatch; found : AA[Edge] required: Set[Edge] val edges2Set: Set[Edge] = edges ^

尤其对于推导高阶函数的复合我的问题。

--------------解决方案-------------

更改序列[_]说明此通配符:

class WithoutUpperBounds[AA[_] <: Seq[_ <: Node], B <: Node](val nodeSeq: AA[B]) extends WithUpperBounds[AA, B] {

@thoredge我指出了正确的方向。 我发现Predef.scala解决方案:

type Set[A] = collection.immutable.Set[A]

通配符扔掉类型等价,但你可以改为抽象了任意参数未声明的。 我的特质,现在是这样的:

trait WithUpperBounds[AA[B] <: Set[B], Node, Edge]…

分类:仿制药 时间:2015-03-15 人气:0
本文关键词: 泛型类型,斯卡拉
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.449 (s). 10 q(s)