1. ホーム
  2. scala

[解決済み] scalaのforeachループ

2022-03-13 07:44:39

質問

scalaのforeachループで、リストがある場合

val a = List("a","b","c","d")

このようにパターンマッチなしで印刷することができます。

a.foreach(c => println(c))

しかし、次のようなタプルがあるとします。

val v = Vector((1,9), (2,8), (3,7), (4,6), (5,5))

を使用する必要があるのでしょうか?

v.foreach{ case(i,j) => println(i, j) }

  1. パターンマッチングケース
  2. 括弧

2つのforeachループが実行されるとどうなるのか、説明してください。

どのように解決するのですか?

そうする必要はない。問題は、現在のScalaコンパイラがタプルを分解しないことですが、あなたはできます。

v.foreach(tup => println(tup._1, tup._2))

しかし、新しい変数名で各要素を単独で参照したい場合は、タプルを分解できるパターンマッチングの部分関数に頼らざるを得ません。

を使用した場合、コンパイラはこのような処理を行います。 case というように

def main(args: Array[String]): Unit = {
  val v: List[(Int, Int)] = scala.collection.immutable.List.apply[(Int, Int)](scala.Tuple2.apply[Int, Int](1, 2), scala.Tuple2.apply[Int, Int](2, 3));
  v.foreach[Unit](((x0$1: (Int, Int)) => x0$1 match {
    case (_1: Int, _2: Int)(Int, Int)((i @ _), (j @ _)) => scala.Predef.println(scala.Tuple2.apply[Int, Int](i, j))
  }))
}

無名の x0$1 を配置し _1_2 内側 ij それぞれ