Warum ist `let ref a: Trait = Struct` verboten?
Wir haben einen nicht kopierbaren Typ und eine Eigenschaft:
struct Struct;
trait Trait {}
impl Trait for Struct {}
Wenn wir ein @ erstell&Struct
und dereferenzieren Sie es, wir erhalten eine R-Wert-Referenz, mit der wir eine By-Ref-Bindung initialisieren können:
let a: &Struct = &Struct;
let ref a: Struct = *a;
Wir können das auch direkt durch ref binding initialisieren:
let ref a: Struct = Struct;
Aber wenn wir unsere Variablenbindung als referenzpflichtig deklarieren, funktioniert nur das erste Code-Snippet
let a: &Trait = &Struct;
let ref a: Trait = *a;
Versuch dies direkt zu tun
let ref a: Trait = Struct;
Oder durch Schleifen gehen
let a: &Struct = &Struct;
let ref a: Trait = *a;
Ode
let ref a: Trait = *&Struct;
Gib uns einmismatched types
Error. Offensichtlich sind sie nicht vom selben Typ, aber Inferenz funktioniert für Referenzen.
Ist dies (noch) nicht implementiert oder gibt es einen tieferen Grund, warum es nicht erlaubt ist?