首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala抽象类型边界交叉引用

Scala抽象类型边界交叉引用
EN

Stack Overflow用户
提问于 2012-05-23 03:39:43
回答 1查看 215关注 0票数 2

我有两个抽象类,它们将包含对每个other.How的引用/我是否可以类型绑定类型成员,以便派生十六进制类的SideT成员中的HexT类型始终是派生十六进制类?因此,对于派生类HexA,可以保证: HexA#SideT#HexT = HexA

类似地,所有派生侧类的HexT成员中的SideT的类型将是派生侧类: SideB#HexT#SideT = SideB

我使用的是Scala for Eclipse 2.1.0.M1和Eclipse 3.7.2,所有类都在单独的文件中。下面的代码编译正常,但不能保证我想要什么:

代码语言:javascript
运行
复制
abstract class Hex { type SideT <: Side {type HexT <= Hex } }
abstract class Side { type HexT <: Hex {type SideT <= side } }
class HexC() extends Hex() { type SideT = SideC }
class SideC extends Side { type HexT = HexC }

但是下面的代码不能在派生的实现中编译:

代码语言:javascript
运行
复制
abstract class Hex{type SideT <: Side {type HexT = this.type}}
abstract class Side{type HexT <: Hex {type SideT = this.type}}
class HexC() extends Hex(){
  type SideT = SideC //This won't compile
}
class SideC extends Side {
  type HexT = HexC //this won't compile
}

这是正确的吗?这应该编译吗?

EN

Stack Overflow用户

回答已采纳

发布于 2012-05-23 13:20:04

这个怎么样?

代码语言:javascript
运行
复制
abstract class Hex {
  type SideT <: Side
}

abstract class Side {
  type HexT <: Hex
}

class HexC extends Hex {
  type SideT = SideC
}

class SideC extends Side {
  type HexT = HexC
}

val evidence1 = implicitly[SideC#HexT =:= HexC]
val evidence2 = implicitly[SideC#HexT#SideT =:= SideC]

或者使用域的封装特征:

代码语言:javascript
运行
复制
trait abstractDomain {
  type SideT <: Side
  type HexT <: Hex

  abstract class Hex
  abstract class Side
}

object domain extends abstractDomain {
  type SideT = SideC
  type HexT = HexC

  class HexC extends Hex
  class SideC extends Side
}

或使用类型参数:

代码语言:javascript
运行
复制
abstract class Hex[HexT <: Hex[HexT, SideT], SideT <: Side[HexT, SideT]]
abstract class Side[HexT <: Hex[HexT, SideT], SideT <: Side[HexT, SideT]]

class HexC extends Hex[HexC, SideC]
class SideC extends Side[HexC, SideC]
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10708950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档