私は頻繁にタプルのリスト、シーケンス、イテレータで作業していることに気づき、次のようなことをしたいと思います。
val arrayOfTuples = List((1, "Two"), (3, "Four"))
arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 }
ただし、コンパイラはこの構文に決して同意しないようです。代わりに、私は書くことになります、
arrayOfTuples.map {
t =>
val e1 = t._1
val e2 = t._2
e1.toString + e2
}
これはばかげています。どうすればこれを回避できますか?
回避策はcase
を使用することです:
arrayOfTuples map {case (e1: Int, e2: String) => e1.toString + e2}
私はタプル機能が好きです。それは便利であり、特に、タイプセーフです:
import Function.tupled
arrayOfTuples map tupled { (e1, e2) => e1.toString + e2 }
使ってみませんか
arrayOfTuples.map {t => t._1.toString + t._2 }
パラメータが複数回、異なる順序で必要な場合、またはネストされた構造で_が機能しない場合は、
arrayOfTuples map {case (i, s) => i.toString + s}
短いですが、読みやすい形式のようです。
別のオプションは
arrayOfTuples.map {
t =>
val (e1,e2) = t
e1.toString + e2
}
Dotty
(Scala 3
)、 parameter untupling が拡張され、そのような構文が可能になりました:
// val tuples = List((1, "Two"), (3, "Four"))
tuples.map(_.toString + _)
// List[String] = List("1Two", "3Four")
各_
は、関連するTupleパーツを順番に参照します。