如何在Scala中的数组中存储不同类型的输入?

如何在Scala中的数组中存储不同类型的输入?,scala,generics,scala-collections,Scala,Generics,Scala Collections,我对Scala非常陌生,我试图了解如何在一个集合中存储不同类型的值 例如,假设我有以下具有相应类型的值: 12-Int 4.0-Float “是学习和练习编码的最佳场所!”——String 如何存储所有三个输入并对每个输入执行不同的逻辑 scala> Array(12, 4.0f, "Hello") res1: Array[Any] = Array(12, 4.0, Hello) scala> res1.foreach{ case i: Int => println("Int

我对Scala非常陌生,我试图了解如何在一个集合中存储不同类型的值

例如,假设我有以下具有相应类型的值:

12-
Int

4.0-
Float

“是学习和练习编码的最佳场所!”——
String

如何存储所有三个输入并对每个输入执行不同的逻辑

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给出的建议。有一个错误的答案:
Seq[Any]
。这是一个任意类型的序列,因此您没有关于成员的信息,需要对它们进行(可能不安全的)强制转换或(可能不彻底的)模式匹配

有一个更好的答案:
HList
,它是一个异构列表,由Shapeless库提供。这将捕获每个成员的类型信息。请看一个例子


有一个最好的答案:仔细考虑一下你是否需要这个。代码>案例类es在大多数情况下会更加惯用。

这是一个很好的问题和答案-