gpt4 book ai didi

class - 对象中的可变值

转载 作者:行者123 更新时间:2023-12-03 12:42:52 25 4
gpt4 key购买 nike

在 Scala 中,如果我计划拥有一个对象的可变属性(例如,一袋数字),什么时候适合

  1. 创建一个 var 并使用不可变数据结构?
  2. 创建一个 val 并使用可变数据结构?

我将猜测您是否希望将 #2 用于线程应用程序?一些集合是线程安全的吗?

一般情况如何? (或者它真的不重要吗?)

最佳答案

不是您问题的完整答案,但是......

您问题中的 1 或 2 不适合多线程环境 — 具有不可变数据结构的 val 适合。对于可变集合的多线程访问,我仍然推荐 java.util.concurrent 包中的 Java 集合。例如,要创建一个可变的并发 HashMap :

def emptyConcurrentHashMap[K, V] = {
import collection.JavaConverters._
new java.util.concurrent.ConcurrentHashMap[K, V].asScala
}

您仍然可以获得像这样更惯用的 Scala 访问器,并且您将使用特殊的原子修改器方法(如 def putIfAbsent(k: A, v: B): Option[B]def replace(k: A, oldvalue: B, newvalue: B): bool 值).

或者,您可以使用包含不可变集合的AtomicReference,并将其替换为它的compareAndSet 方法。

关于class - 对象中的可变值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10217844/

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