scala – 返回路径依赖类型
发布时间:2020-12-16 10:01:50 所属栏目:安全 来源:网络整理
导读:如何设计返回路径依赖类型的方法?在下面的例子中,我故意希望Vertex是依赖于Tree的路径,这样就禁止在树之间混合顶点(这只是一个例子): trait Tree { trait Vertex def root: Vertex def addChild(parent: Vertex): Vertex}trait TreeFactory { def make: Tr
如何设计返回路径依赖类型的方法?在下面的例子中,我故意希望Vertex是依赖于Tree的路径,这样就禁止在树之间混合顶点(这只是一个例子):
trait Tree { trait Vertex def root: Vertex def addChild(parent: Vertex): Vertex } trait TreeFactory { def make: Tree } 现在无法构造以下内容: def test(f: TreeFactory): (Tree,Map[Tree#Vertex,Tree#Vertex]) = { val t = f.make var sq = IndexedSeq(t.root) var m = Map.empty[t.Vertex,t.Vertex] for( i <- 1 to 100) { val p = sq(util.Random.nextInt(sq.size)) val c = t.addChild(p) m += c -> p sq :+= c } (t,m) } 因为很明显我返回的地图不应该有Tree#Vertex类型的键和值,而是路径依赖顶点的键和值… error: type mismatch; found : scala.collection.immutable.Map[t.Vertex,t.Vertex] required: Map[Tree#Vertex,Tree#Vertex] Note: t.Vertex <: Tree#Vertex,but trait Map is invariant in type A. You may wish to investigate a wildcard type such as `_ <: Tree#Vertex`. (SLS 3.2.10) (t,m) ^ 如果我尝试解耦树创建和父子映射构建: def test(t: Tree): Map[t.Vertex,t.Vertex] = { var sq = IndexedSeq(t.root) var m = Map.empty[t.Vertex,t.Vertex] for (i <- 1 to 100) { val p = sq(util.Random.nextInt(sq.size)) val c = t.addChild(p) m += c -> p sq :+= c } m } 这失败的另一个原因是:“错误:非法依赖方法类型” 解决方法
我扭曲的想法想出了这个.我希望有一个更优雅的解决方案:
trait Gagaism { val tree: Tree val map: Map[tree.Vertex,tree.Vertex] } def test(f: TreeFactory) = new Gagaism { val tree = f.make val map = { var sq = IndexedSeq(tree.root) var m = Map.empty[tree.Vertex,tree.Vertex] for (i <- 1 to 100) { val p = sq(util.Random.nextInt(sq.size)) val c = tree.addChild(p) m += c -> p sq :+= c } m } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angular – 如何使用ngrx和effects订阅动作成功回调
- scala – 如何展平试试[选项[T]]
- 【Scala之旅】参数与操作符
- scala – 在spark中导入TSV文件
- scala – Spark应用程序抛出javax.servlet.FilterRegistrat
- scala – 最后可以尝试Try吗?
- Angular8开发拼多多WebApp-从基础到项目实战资源
- scala – 构建一系列时间相关的名称
- twitter-bootstrap-3 – typeahead bootstrap3:如何将参数
- Angular2 – ngAfterViewChecked被多次调用..如何在DOM完全