6

我想要做的基本上是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也有效。

4

2 回答 2

20

这个怎么样:

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
于 2013-08-19T06:19:07.940 回答
4

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

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将只是空列表。当然,它不处理两个或更少元素的列表。

于 2013-08-19T10:13:11.753 回答