编辑:
我想做的基本上是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
将只是空列表。当然,它不处理两个或更少元素的列表。