gpt4 book ai didi

scala - 关于案例类/对象/匹配的建议

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

我正在尝试对(在我的 Scala 应用程序中)我的网页中显示的选项列表进行建模,并且正在绞尽脑汁想出一个用于映射 String 的解决方案。从客户端发布到后端相应对象的值。

例如。假设它是一个列表 Animals并且用户可以选择 1 发布到后端。

Animals
Polar Bear
Rabbit
Great White Shark

当请求进来时,我想转换 大白鲨 StringAnimal但不确定如何最好地匹配 String到后端的适当类型。

到目前为止,我有这个。
sealed abstract class Animal(val name: String)

case object GreatWhite extends Animal("Great White Shark")
case object PolarBear extends Animal("Polar Bear")

这允许我这样做以将 UI 中的字符串与我的 Scala 应用程序中的相应 case 对象进行匹配。
def matcher(animal: String) = animal match {
case GreatWhite.name => GreatWhite
case PolarBear.name => PolarBear
}

问题

然而,如果 Animal 的列表变长,这个匹配器将非常麻烦,因为我需要一个 case每个 Animal 的表达式.

我将非常感谢任何有经验的 Scala 人员给我一个更优雅的解决方案的指针。

最佳答案

看起来你需要的只是一个字符串到动物的哈希表。
这种方法使您能够在恒定时间 O(1) 内获得结果,即使列表不断增长。

val mapping = Map[String, Animal]("Rabbit" -> Rabbit, "Polar Bear" -> PolarBear /* ... */ )

// matcher
mapping.get(animal)

更新。
下面是一些有用的评论。
  sealed abstract class Animal(val name: String)

case object GreatWhite extends Animal("Great White Shark")
case object PolarBear extends Animal("Polar Bear")

val mapping: Map[String, Animal] = Seq(GreatWhite, PolarBear).map(x => x.name -> x).toMap
mapping

关于scala - 关于案例类/对象/匹配的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37046811/

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