Rust'ta 'x = x' ne yapar?


117

Bu kodu vahşi ortamda gördüm :

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

Ne geliyor let fields = fields;hat mı? Neden orada?

Yanıtlar:


144

Yine fieldsdeğişmez kılıyor .

fieldsönceden let mut fields = …;, sort_by_keyyerinde sıralayan ve hedefin değiştirilebilir olmasını gerektiren mutable ( ) olarak tanımlanmıştı . Yazar, daha fazla değişkenliği açıkça önlemek için burayı seçti.

Değişken bir bağın değişmeze "indirgenmesi" Rust'ta oldukça yaygındır.

Bunu yapmanın başka bir yaygın yolu da bir blok ifadesi kullanmaktır:

let fields = {
    let mut fields =;
    fields.sort_by_key();
    fields
};

44
Veya bakış açınıza bağlı olarak "yükseltme".
Synesso

8
IMO yazmak için başka bir yol budur: Değişken değişken, onu kullanmamız gereken süreye göre belirlenir ve sonra hareket ettirilir. Anlamsal olarak daha iyidir.
Boiethios

@DarthBoiethios Biri veya diğeri derlenmiş koda bir şey değiştirir mi? Ek, gereksiz bir talimat eklemek gibi mi? Ya da değişmezlik varsayımlarına dayalı olarak derleyici tarafından daha agresif optimizasyonları etkinleştirmek mi?
iago-lito,

1
@ iago-lito Dürüst olmak gerekirse, emin değilim, ancak eğitimsiz tahminim, bu hiçbir şeyi değiştirmez.
Boiethios

1
@ iago-lito Şu anda gerçekten öyle! Ancak bu bir hata olarak kabul edilir ve bir noktada düzeltilmesi muhtemeldir.
mcarton

19

İfadesi let var = var;yapar vardeğişmez ve mevcut değerine bağlı. fieldsdaha mutönce olduğu ilan edildi .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.