私はこれを熟考し、今日あなたの質問になりました。
論理フローのエントリポイントが増える可能性があることを意味するので、部分的な機能のアプローチ(何かがcase
のもの)があまり好きではありません。少なくとも私には、コードの意図を曖昧にする傾向があります。一方、私は本当にあなたのようなタプルフィールドにまっすぐに行きたいです。
ここに私が今日起草した解決策があります。それはうまくいくようですが、私はまだそれを実際に試していません。
object unTuple {
def apply[A, B, X](f: (A, B) => X): (Tuple2[A, B] => X) = {
(t: Tuple2[A, B]) => f(t._1, t._2)
}
def apply[A, B, C, X](f: (A, B, C) => X): (Tuple3[A, B, C] => X) = {
(t: Tuple3[A, B, C]) => f(t._1, t._2, t._3)
}
//...
}
val list = List(("a",1), ("b",2))
val list2 = List(("a",1,true), ("b",2,false))
list foreach unTuple((k: String, v: Int) =>
println(k, v)
)
list2 foreach unTuple((k: String, v: Int, b: Boolean) =>
println(k, v, b)
)
出力:
(a,1)
(b,2)
(a,1,true)
(b,2,false)
は多分これは有用であることが判明しました。 unTuple
オブジェクトは、必然的にいくつかのツールの名前空間に置かれるべきです。
補遺:あなたの場合に適用
:
val m = l.filter(unTuple((n:Int,color:String) =>
n != 2
))
あなたが ''それが使用されることはありませんよう_'でS'交換することができます。 – missingfaktor
これは素晴らしいです、ありがとうございます。 – dvmlls
それよりも短くすることもできます。 –