Değişmez bir değişkene değiştirilebilir bir referans mı elde edersiniz?
İşte kod, a
değişmez olarak ilan edildiğinden, değişken bir referans alamıyoruz a
, değil mi? Ama bu derlendi, bu neden?
struct Foo;
fn main() {
let a = &mut Foo;
a.mut_ref();
}
impl Foo {
fn mut_ref(&mut self) { }
}
kod bağlantısı
Yanıtlar
Değişkenin a
türü &mut Foo
, yani a
kendisi bir Foo
nesneye değiştirilebilir bir referanstır . Mutasyon a
, onu farklı bir Foo
nesneye işaret etmek anlamına gelir . Yana a
kendisi değişmez, ne değiştiremezsiniz a
işaret ediyor, ve kod herhangi bir şekilde bu haksız çıkarmaz.
Kodunuz basitçe parametresi &mut Foo
olarak geçer - türünün de olduğunu unutmayın . Otomatik yeniden referanslama gerçekleşmiyor - zaten tam olarak parametre için beklenen türe sahip . Bununla birlikte, burada örtük bir yeniden borçlanma başlatıyoruz , bu nedenle çağrı ile eşdeğerdir . Bu örtük yeniden ödünç alma, kodun çalışmasını sağlayan şey değildir - değişken referansın dışarı çıkarılmasına da tamamen izin verilecektir.self
mut_ref()
self
&mut Foo
a
self
Foo::mut_ref(&mut *a)
a
a
Değişken olarak değişmez olsa da, yine de değiştirilebilir bir referanstır, böylece Foo
işaret ettiği nesneyi değiştirebilirsin ( Foo
mutasyona uğrayacak herhangi bir durum olduğunu varsayarak ). Türüne a
sahip olması gereken değişken bir referans elde edemezsiniz &mut &mut Foo
.