有没有一种方法可以在Scala中从数组或List初始化多个变量



我想做的基本上是Java代码中的以下内容:

String[] tempStrs = generateStrings();
final int hour = Integer.parseInt(tempStrs[0]);
final int minute = Integer.parseInt(tempStrs[1]);
final int second = Integer.parseInt(tempStrs[2]);

然而,tempStrs只是一个临时变量,不再使用。然后,这可以用F#中的以下代码表示:

let [| hour; minute; second |] = Array.map (fun x -> Int32.Parse(x)) (generateStrings())

在Scala中有类似的方法吗?我知道可以在Scala中完成

val tempInts = generateStrings().map(_.toInt)
val hour = tempInts(0)
val minute = tempInts(1)
val second = tempInts(2)

但是有没有像F#(没有温度变量)这样更短的方法?


编辑:

我使用

var Array(hour, minute, second) = generateStrings().map(_.toInt)

当然,使用val代替var也是有效的。

这个怎么样:

scala> val numbers = List(1, 2, 3)
numbers: List[Int] = List(1, 2, 3)
scala> val List(hours, minutes, seconds) = numbers
hours: Int = 1
minutes: Int = 2
seconds: Int = 3

要处理三个或多个值,可以使用:

scala> val numbers = List(1, 2, 3, 4)
numbers: List[Int] = List(1, 2, 3, 4)
scala> val num1 :: num2 :: num3 :: theRest = numbers
num1: Int = 1
num2: Int = 2
num3: Int = 3
theRest: List[Int] = List(4)

对于大小为3的列表,theRest将只是空列表。当然,它不处理两个或更少元素的列表。

最新更新