15

以下のコード例で、isAListfor内包では List が生成されるのに、他の 2 つの内包では Maps が生成されるのはなぜですか? 理由は思いつきません - 唯一の違いは、isAListの内包が 2 つの変数を宣言し、他のものは 1 つまたは 0 を宣言することです。

object Weird {
  def theMap: Map[Int, String] =
    Map(1 -> "uno", 2 -> "dos", 3 -> "tres")

  def main(args: Array[String]) {

    val isAMap = for {
      (key, value) <- theMap
    } yield (key*2 -> value*2)

    val isAlsoAMap = for {
      (key, value) <- theMap
      doubleKey = key*2
    } yield (doubleKey -> value*2)

    val isAList = for {
      (key, value) <- theMap    
      doubleKey = key*2
      doubleValue = value*2
    } yield (doubleKey -> doubleValue)

    println(isAMap)
    println(isAlsoAMap)
    println(isAList)
  }
}

出力

Map(2 -> unouno, 4 -> dosdos, 6 -> trestres)
Map(2 -> unouno, 4 -> dosdos, 6 -> trestres)
List((2,unouno), (4,dosdos), (6,trestres))

私は Scala に比較的慣れていないので、何かについて信じられないほどナイーブである場合は申し訳ありません。

4

1 に答える 1