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.