Jestem nowy w Rust i próbuję nauczyć się, jak działają referencje. W poniższym kodzie, gdy chcę wykonać obliczenie na a1
, które jest i32
, nie muszę tego dereferencji. Ale z b1
, który jest Box
, muszę go usunąć.Czy Rust automatycznie wyłącza referencje typu pierwotnego?
Właściwie zarówno let a2 = a1 * 2;
, jak i let a3 = *a1 * 2;
zachowują się podobnie. Wygląda na to, że dereferencje w elementach podstawowych są opcjonalne LUB kompilator domyślnie robi to za nas.
fn main(){
let a = 5;
let b = Box::new(10);
let a1 = &a;
let b1 = &b;
println!("{} {}", a1, b1);
let a2 = a1 * 2;
let b2 = (**b1) * 10;
let a3 = *a1 * 2;
println!("{} {} {}", a2, a3, b2);
}
Czy ktoś może wyjaśnić tę funkcjonalność?
Tak, nieograniczone typy całkowite domyślnie przyjmują wartość "i32". –