2016-06-17 8 views

Odpowiedz

11

const w Rust, jest skrótem od stałej i jest związana z oceną kompilacji. Pojawia się:

  • podczas deklarowania stałych: const FOO: usize = 3;
  • podczas deklarowania czasu kompilacji funkcji możliwych do oceny: const fn foo() -> &'static str

Takie wartości mogą być używane jako parametry ogólne: [u8; FOO]. Na razie jest to ograniczone do rozmiaru tablicy, ale jest rozmowa, plany i nadzieja na jej dalsze rozszerzenie w przyszłości.

Z kolei powiązanie let dotyczy obliczonej wartości czasu wykonywania.

Należy pamiętać, że pomimo że pojęcie zmienności jest dobrze znane, Rust rzeczywiście leży tutaj. &T i &mut T są o aliasingu, nie zmienność:

  • &T: wspólne odniesienie
  • &mut T: wyjątkowy odniesienie

Przede wszystkim, niektóre rodzaje wyposażone wewnętrzną zmienność i może być zmutowany poprzez &T (wspólne odniesienia): Cell, RefCell, Mutex, itp.


Uwaga: istnieje alternatywa wykorzystanie mut i const z surowych wskaźników (*mut T i *const T), który nie jest tu mowa.

1

const jest dla stałych kompilacyjnych ze wszystkim, co pociąga za sobą. Na przykład można utworzyć macierz o stałej wielkości, której rozmiar to const, ale nie można tego zrobić z powiązaniem let. Oczywiście oznacza to również, że możesz włożyć o wiele więcej rzeczy w wiązanie let niż w const.

8

const nie jest dla zmiennych; to dla stałych wartości, które nie mogą być nigdzie przechowywane; są one faktycznie pseudonimem o dosłowności.

Nie- mutlet deklaruje rzeczywista zmienna, która jest tworzona w czasie wykonywania, mogą być przemieszczane (i nie jest już dostępny), a nawet mieć wewnętrzną zmienność (jeśli zawiera Cell członków, na przykład) w niektórych przypadkach.

0

Stałe nie mogą być na nowo:

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 
Powiązane problemy