グレムリンで足を濡らしているところです。グレムリンはグルーヴィーに基づいていることを理解しています。ここでドキュメントを見つけましたが、構文の意味がまだわかりません。
コンパレータを使用したソートの構文がどのように機能するかについて、少し混乱しています。
m.sort{a,b -> a.value <=> b.value}
誰かがとの間のすべての異なるビットが何{
を}
意味するのか説明できますか?
Closure
によって使用されるsort
パラメータが2つある場合、従来ののように機能しますComparator
。つまり、ソート中に行われる2つの要素a
との間の比較ごとに、最初の引数が2番目の引数よりも小さい、等しい、または大きいため、負の整数、ゼロ、または正の整数が返されb
ます。
特定のシナリオでは、比較は宇宙船オペレーター <=>
を使用した結果です。つまり、要素を昇順で効果的に並べ替えています。
たとえば、リストがある場合、[ 3, 2, 1 ]
その並べ替えを使用した結果はになります [ 1, 2, 3 ]
。
したがって、これm.sort{a,b -> a.value <=> b.value}
は次の関数を使用するのとほぼ同じです。compare
int compare(a, b) {
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
}
宇宙船オペレーター<=>
はオーバーロードされたオペレーターであり、を表しcompareTo()
ます。基本的a<=>b
にはと同じですa.compareTo(b)
あなたが与えた例はsort()
、クロージャ付きの関数を使用しています(Java8のラムダのように)。その構文は次のとおりです。
.method{
closureParameters
->statements
}
したがって、あなたの例はクロージャsort()
付きの関数を使用しています。そのクロージャ内では、宇宙船(コンパレータ)演算子を使用します。
演算子のオーバーロードについて詳しくは、こちらをご覧ください