gpt4 book ai didi

scala - Scala 中带有参数的构造函数

转载 作者:行者123 更新时间:2023-12-04 09:36:04 24 4
gpt4 key购买 nike

我只需要一个类的实例,所以我必须使用一个对象而不是一个类。我还需要设置一些由客户端选择的初始值,所以我需要一个对象的构造函数,如下所示:

object Object1(val initValue: Int){
//.....
}

我不能在 Scala 中使用这个确切的代码。那我该怎么处理呢?

最佳答案

你有几个选择:

  • 让它成为一个类,让客户端构造它,在参数中给出值
    优点:保持不变性
    缺点:只有一个实例可能很难管理
  • 为 param 添加一个变量到对象,添加一个 setter。
    优点:你仍然有一个单例
    缺点:现在有可变状态
  • 实现 multiton
    优点:为您提供(明显的)不变性和单例(每个参数)
    缺点:更多代码来实现

  • 您可以在 Scala 中实现这样的 multiton:
    class Object1 private (val initValue: Int) {
    // ...
    }

    object Object1 {
    val insts = mutable.Map.empty[Int, Object1]

    def apply(initV: Int) =
    insts.getOrElseUpdate(initV, new Object1(initV))
    }

    更新 你也可以把它变成一个“带参数的单例”:
    object Object1 {
    var inst: Option[(Int, Object1)] = None

    def apply(initV: Int) = inst match {
    case Some((`initV`, i)) => i
    case Some(_) =>
    sys.error("Object1 already instantiated with different param")
    case None =>
    val i = new Object1(initV)
    inst = Some((initV, i))
    i
    }
    }

    关于scala - Scala 中带有参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16901419/

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