【问题标题】:How to store different types of input in an array in Scala?如何在Scala的数组中存储不同类型的输入?
【发布时间】:2023-03-21 00:33:01
【问题描述】:
我是 Scala 的新手,我试图了解如何在集合中存储不同类型的值。
例如,假设我有以下具有相应类型的值:
12 - Int
4.0 - Float
“是学习和练习编码的最佳场所!” - String
如何存储所有三个输入并在每个输入上执行不同的逻辑?
【问题讨论】:
标签:
scala
generics
scala-collections
【解决方案1】:
有一个错误的答案:Seq[Any]。这是任何类型的序列,因此您没有关于成员的信息,并且需要再次执行(可能不安全)强制转换或(可能非详尽)模式匹配。
有一个更好的答案:HList,这是一个异构列表,由 Shapeless 库提供。这将捕获有关每个成员的类型信息。查看示例here。
有一个最佳答案:仔细考虑你是否需要这个。 case classes大部分时间会更习惯用语。
【解决方案2】:
scala> Array(12, 4.0f, "Hello")
res1: Array[Any] = Array(12, 4.0, Hello)
scala> res1.foreach{ case i: Int => println("Integer"); case f: Float => println("Float"); case s: String => println("String")}
Integer
Float
String
但是 - 你应该听从@erip 的建议