Ho appreso che se una variabile non è dichiarata esplicitamente mutabile utilizzando mut
, diventa immutabile (non può essere modificata dopo la dichiarazione). Allora perché abbiamo la parola chiave const
in Rust? Non sono loro stessi? In caso contrario, come si differenziano?Qual è la differenza tra variabili immutabili e const in Rust?
risposta
const
, a Rust, è l'abbreviazione di costante ed è relativo alla valutazione fase di compilazione. Si presenta:
- costanti quando dichiarano:
const FOO: usize = 3;
- quando si dichiara momento della compilazione funzioni valutabili:
const fn foo() -> &'static str
Questi tipi di valori possono essere utilizzati come parametri generici: [u8; FOO]
. Per ora questo è limitato alle dimensioni dell'array, ma ci sono discorsi, piani e speranze di estenderlo ulteriormente in futuro.
Al contrario, un binding let
riguarda un valore calcolato in fase di esecuzione.
Si noti che nonostante l'utilizzo di mut
perché è noto il concetto di mutabilità, Rust si trova in questo punto. &T
e &mut T
sono circa aliasing, non mutevolezza:
&T
: riferimento condiviso&mut T
: riferimento unico
In particolare, alcuni tipi presentano mutevolezza interni e possono essere mutati tramite &T
(riferimenti condivisi): Cell
, RefCell
, Mutex
, ecc.
Nota: c'è un uso alternativo dei mut
e const
con puntatori prime (*mut T
e *const T
) che non è discusso qui.
const
è una costante per la compilazione con tutto ciò che comporta. Ad esempio, è possibile creare un array di dimensioni fisse le cui dimensioni sono un const
, ma non è possibile farlo con un binding let
. Naturalmente, ciò significa anche che è possibile inserire molte più cose in un binding let
anziché in un const
.
const
non è per le variabili; è per valori costanti che non possono essere memorizzati da nessuna parte; sono effettivamente un alias per un valore letterale.
Non- mut
let
dichiara una variabile reale che viene creata in fase di esecuzione, può essere spostata (e non più accessibile), e anche avere mutevolezza interno (se contiene Cell
membri, per esempio) in alcuni casi.
costanti non possono essere ridefiniti:
let x = 10u32;
const Y:u32 = 20u32;
let x = 11u32;
//error: duplicate definition of value `Y` [E0428]
//const Y:u32 = 21u32;
println!("x={} Y={}",x,Y); //x=11 Y=20
- 1. Qual è la differenza tra const const e const?
- 2. Qual è la differenza tra const e immutable in D?
- 3. Qual è la differenza tra Const e Constant?
- 4. Qual è la differenza tra "const" e "val"?
- 5. Qual è la differenza tra letterale e variabili in Python?
- 6. Qual è la differenza tra variabili firmate e non firmate?
- 7. qual è la differenza tra import e const e quale è preferito in commonjs
- 8. Qual è la differenza tra una funzione membro const e una funzione membro non const?
- 9. Qual è la differenza tra "std :: string const & s" e "const std :: string & s"?
- 10. Qual è la differenza tra l'uso e l'extern?
- 11. Qual è la differenza tra logicalDpiX e physicalDpiX in Qt?
- 12. Qual è la differenza tra $ host e $ http_host in Nginx
- 13. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 14. Qual è la differenza tra le variabili di sessione e le variabili globali in php?
- 15. Qual è la differenza tra = e: =
- 16. Qual è la differenza tra `##` e `hashCode`?
- 17. In TensorFlow, qual è la differenza tra Session.run() e Tensor.eval()?
- 18. Qual è la differenza tra dict() e {}?
- 19. qual è la differenza tra:.! e: r !?
- 20. Qual è la differenza tra Verilog! e ~?
- 21. Qual è la differenza tra ("") e (null)
- 22. Qual è la differenza tra cholesky in numpy e scipy?
- 23. Differenza tra oggetti mobili e oggetti immutabili
- 24. Qual è la differenza tra variabile e @variable in MySQL
- 25. Qual è la differenza tra? : e ||
- 26. qual è la differenza tra [[], []] e [[]] * 2
- 27. Qual è la differenza tra $ e $$?
- 28. Qual è la differenza tra " " e ""?
- 29. Qual è la differenza tra {0} e ""?
- 30. Qual è la differenza tra {0} e +?