gpt4 book ai didi

scala构造函数-局部变量再次

转载 作者:行者123 更新时间:2023-11-30 23:45:43 30 4
gpt4 key购买 nike

我正在将我的 java 代码移植到 scala,并且有一个可以做很多事情的构造函数:

  1. 打开休眠 session 加载数据
  2. 加载(现在 session 保持打开状态!我需要进一步延迟加载)
  3. 对加载的数据进行一些操作并放入容器
  4. 将容器与其消费者联系起来
  5. ..等等等等
  6. 结束 session

构造函数产生相当数量(~20)的对象成员,它们是最终的(scala 中的 val)。自己的创作不是独立的,还要注意session。显然我不希望 session 和其他临时内容成为构造的实例成员。我如何在 Scala 中做到这一点?

之前已经问过类似的问题:

在前面的主题中给出的答案建议从初始化方法返回一个包含 ~20 个字段的元组,或者创建一个私有(private)构造函数,将这 20 个值作为伴随对象 apply 方法的参数。在我看来,这两种 pig 都很丑。

到目前为止,最明智的方法似乎是将这些字段声明为 vars,而不是 vals,并在一些初始化方法中重新分配它们,这也有点味道。

最佳答案

我有一个技术上正确的解决方案,但它可能不是你想要的,因为它引入了很多冗长的内容

trait Example {
val a1 : Int
val a2 : Int
val a3 : Int
val a4 : Int
val a5 : Int
val a6 : Int
}
object Example {
def apply(seed : Int) : Example = {
val x1 = seed + 1
val x2 = x1 * 2
val x3 = x2 / 3
val x4 = x3 + x1
val x5 = x4 * x2
val x6 = x5 - x4
new Example {
override val a1 = x1
override val a2 = x2
override val a3 = x3
override val a4 = x4
override val a5 = x5
override val a6 = x6
}
}
}

所以没有构造函数,也没有初始化方法接受很多变量,但它们是通过特征扩展传递的

关于scala构造函数-局部变量再次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23536183/

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