我想要做的基本上是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
也有效。
答案 0 :(得分:15)
这个怎么样:
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
答案 1 :(得分: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
将只是空列表。当然,它不处理两个或更少元素的列表。