タプルと、case class を使った名前の後付け

Rainy Day Codings - Scala で怠惰なリテラル表記


タプルを使うとこんな感じで書ける

object Main {
  def main(args : Array[String]): Unit = {
    val ls = List(
               ("Akira",  23, "Japan"),
               ("Johnny", 38, "America"),
               ("Millia", 16, "Russia")
             )

    ls.foreach{x =>
      println(x._1) // 名前
      println(x._2) // 年齢
      println(x._3) // 国籍
    }
  }
}

これを、_1, _2, _3 ではなく、name, age, country と書きたい

case class Person(name: String, age: Int, country: String)

object Main {
  implicit def tupleToPerson(tup: (String, Int, String)): Person = tup match {
    case (name, age, country) => Person(name, age, country)
  }

  def main(args : Array[String]): Unit = {
    val ls = List(
               ("Akira",  23, "Japan"),
               ("Johnny", 38, "America"),
               ("Millia", 16, "Russia")
             )

    ls.foreach{x =>
      println(x.name)
      println(x.age)
      println(x.country)
    }
  }
}

使う側のコードだけ見るとけっこう怪しいけど、おもしろいな