web-dev-qa-db-ja.com

Rustでは 'let x = x'は何をしますか?

私はこのコードを見ました 野生で

fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;

let fields = fields;行は?なぜそこにあるのですか?

112
timthelion

fieldsを再び不変にします。

fieldsは以前に可変(let mut fields = …;)として定義されていました。これは、インプレースでソートされ、ターゲットが可変であることが必要なsort_by_keyで使用されます。著者は、これ以上の可変性を明示的に防止することを選択しました。

不変への変更可能なバインディングの「ダウングレード」は、Rustでは非常に一般的です。

これを行うもう1つの一般的な方法は、ブロック式を使用することです。

let fields = {
    let mut fields = …;
    fields.sort_by_key(…);
    fields
};
138
mcarton

ステートメントlet var = var;varを不変にし、現在の値にバインドします。 fieldsは、以前にmutとして宣言されました。

18
Govind Parmar