scala - 在 Scala 中声明一个与另一个变量类型相同的变量

标签 scala

假设我有一个变量

val allF = (Some(1), "some string", 2.99, "another string", 1, Some(30))

现在我想声明几个与 allF 类型相同的变量,即 (Some[Int], String, Double, String, Int, Some[Int])。我能做到

var a1: (Some[Int], String, Double, String, Int, Some[Int]) = _
var a2: (Some[Int], String, Double, String, Int, Some[Int]) = _
... and so on

或者我可以做

type T = (Some[Int], String, Double, String, Int, Some[Int])
var a1: T = _
var a2: T = _
.. and do on

有什么方法可以使用变量allF来获取其类型并声明变量a1a2a3,...像这样

val allF = (Some(1), "some string", 2.99, "another string", 1, Some(30))
var a1: typeof(allF) = _
var a2: typeof(allF) = _
...

更新- 也适用于这样的情况

val allF = (Some(1), "some string", 2.99, "another string", 1, Some(30))
 xyz match {
   case y: (???)\\ if y is of the same type as allF
}

最佳答案

这取决于你的意思。

如果您确实想在同一范围内声明所有变量,按照您的示例,您可以这样做:

  var a, b, c = (5,4,3,2,1) // All have the same type and value

但是,如果您说要创建一个与编译时不知道其类型的变量具有相同类型的变量(可能是作为参数传递的 AnyRef),那么您将受到与 Java(或任何其他静态类型语言)中相同的限制。您可以通过反射创建变量,但只能将其作为对象进行操作。

关于scala - 在 Scala 中声明一个与另一个变量类型相同的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878014/

相关文章:

scala - 列表的 Fold 和 Fold[Right/Left] 方法的签名差异

java - Scala 与 Maven : Execute a -jar-with-dependencies with a class

scala - 使用未过滤的解码请求实体

scala - (/home/user/.sbt) 已被弃用。请使用标准位置 :/home/user/project?

java - Java 中有什么东西接近于 Scala 中的并行集合吗?

scala - 无法解析 Spark Dataframe 中的列(数字列名称)

scala - 使用 Squeryl 必须绑定(bind) session 错误

json - 如何使用json4s从json数组解析和提取信息

scala - 如何通过 Maven 使用 Scala 2.9 的夜间构建?

scala - 将参数传递给 Scala 中的 App 对象