scala - 你会如何用猫包装一个包含并发 HashMap 的类?

标签 scala concurrenthashmap scala-cats http4s

假设我有一个包含内部并发 HashMap 的类

final class SomeClass() {
  private val byUserId = new ConcurrentHashMap[User.ID, Vector[User]](64)

  // ...
}

现在,如果我想在我的 API 端点和我的服务的其他区域中引用此类,我该如何将其包装在 cats IO/effects 中?

既然这已经是管理状态,它仍然是一个效果 IO 吗?

需要一些指导,因为我对 FP 有点困惑和陌生。

最佳答案

我想这取决于您将如何使用它。这是我对此的看法。

所以您可能希望在不同进程之间共享此类的一个实例(和一个映射),对吗?所以它的实例化应该包装在IO中。然后你可以将它作为依赖项注入(inject)到所有其他需要使用它的地方。那么这个类的所有与 Map 有任何关系的公共(public)方法也应该返回一个 IO。

final class SomeClass private() {
  private val byUserId = new ConcurrentHashMap[User.ID, Vector[User]](64)

  def getById(id: User.ID): IO[Vector[User]] = ???

  def setUser(id: User.ID, user: Vector[User]): IO[Unit] = ???
}

object SomeClass {
  def apply() = IO(new SomeClass())
}

SomeClass().flatMap { instance =>
  // do stuff with it
  Api(instance)
}

关于scala - 你会如何用猫包装一个包含并发 HashMap 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63255082/

相关文章:

scala - 如何异步中断 fs2 流?

scala - 用 Scala 编写一个实用且实用的图像处理库

java - 使用ConcurrentHashMap解决数据不一致问题

scala - ClassCastException 当 asInstanceOf 用于理解时

java - 为什么ConcurrentHashMap的get方法中存在readValueUnderLock(e)?

java - Hashmap 或 linkedhashmap 或其他任何一个对链接项进行排序哪个更好?

scala - 如何读取复杂的 scala 类型定义,如 `` `type Pipe[F[_], -I, +O] = Stream[F, I] => Stream[F, O] `` `

scala-cats - 与猫和精炼类型一起使用时无法生成 Circe 解码器

scala - Spark 斯卡拉 : Check if string isn't null or empty

scala - Scala 中的 Akka,感叹号和问号