gpt4 book ai didi

scala - 如何从Scala中的内部类引用外部对象

转载 作者:行者123 更新时间:2023-12-01 07:38:09 25 4
gpt4 key购买 nike

考虑这个代码(这是一种类型安全的单位):

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)
}

为了使整个事情工作,我需要调用外部对象的 apply 方法关于继承(在上面的代码中标记为 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 一章,了解有关此构造还允许您做什么的更多信息。

    关于scala - 如何从Scala中的内部类引用外部对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149277/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com