外部述語に依存するリストをソートしたい。私は表現力豊かなScalaの代替案を探しています。私が思いついた2つの選択肢には夢中ではない。考える:私はそうのような簡潔なソート式書くことができるようにしたいソート用の部分関数の値
val lst = List(5,4,3,2,1)
val needsSorting = false
:私のリストを与えること
lst.sortBy(sortDecision)
は昇順のいずれかでソート:
List(1,2,3,4,5) // if needSorting == true
やで元の年代順
List(5,4,3,2,1) // if needSorting == false
しかし私は私のsortDecision
部分的な機能に埋め込まれるようにソートする方法についての決定をしたい。
オルタナティブ1:
val sortDecision: PartialFunction[Int,Int] = {
case x: Int if (needsSorting) => x
case _ => -1
}
オルタナティブ2:
val sortDecision: PartialFunction[Int,Int] = {
case x: Int => if (needsSorting) x else -1
}
が、両方のケースで、私はneedsSorting場合、いくつかの充填材を生産するために持っている!私は何を作ってみたことは二つの選択肢です(この場合は-1)、コンパイラが幸せになるようにします。これは悪臭コードです。誰かがもう少しエレガントな同じことを達成するための選択肢を提供することができますか?
"コードの匂い"が何であるか正確にはわかりません。しかし、 '-1'があるのが気に入らなければ、' val NoSort = -1'という定数を使うことができます。 – gregghz