グレムリンで足を濡らしているところです。グレムリンはグルーヴィーに基づいていることを理解しています。ここでドキュメントを見つけましたが、構文の意味がまだわかりません。
コンパレータを使用したソートの構文がどのように機能するかについて、少し混乱しています。
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()付きの関数を使用しています。そのクロージャ内では、宇宙船(コンパレータ)演算子を使用します。
演算子のオーバーロードについて詳しくは、こちらをご覧ください