运维开发网

如何在Scala中引用内部类的外部对象

运维开发网 https://www.qedev.com 2020-07-29 07:44 出处:网络 作者:运维开发网整理
考虑这段代码(这是一种类型安全的单位): abstract class UnitsZone { type ConcreteUnit <: AbstractUnit abstract class AbstractUnit(val qty: Int) { SOME_ABSTRACT_MEMBERS def +(that: ConcreteUnit): Concrete
考虑这段代码(这是一种类型安全的单位):

abstract class UnitsZone {
   type ConcreteUnit <: AbstractUnit

   abstract class AbstractUnit(val qty: Int) {
     SOME_ABSTRACT_MEMBERS
     def +(that: ConcreteUnit): ConcreteUnit = POINT_OF_INTEREST.apply(this.qty + that.qty)
     def apply(param: Int) = SOME_IMPLEMENTATION
   }

   def apply(qty: Int): ConcreteUnit
}

object Imperial extends UnitsZone {
  type ConcreteUnit = Pound

  class Pound(override val qty: Int) extends AbstractUnit(qty) {
    CONCRETE_MEMBERS_HERE
  }

  def apply(qty: Int) = new Pound(qty)
}

为了使整个事情有效,我需要调用外部对象的继承方法(在上面的代码中标记为POINT_OF_INTEREST).考虑到这一点,我敢问几个问题:

>有什么办法吗?

>如果有很多,每个人的利弊是什么?

>如果您认为整件事情是错误的,那么您实施此类功能的正确方法是什么?

使用自我参考:

abstract class UnitsZone {
  outer =>
  type ConcreteUnit <: AbstractUnit
  ...
  abstract class AbstractUnit(val qty: Int) {
    def +(that: ConcreteUnit): ConcreteUnit = outer.apply(this.qty + that.qty)
    ...
  }
}

有关此构造允许您执行的其他操作的详细信息,请参阅SO Scala教程的第17. Self references章.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号