Próbuję zrozumieć koncepcję własności i pożyczek. Na początku myślałem, że to było całkiem proste, kiedy to zrozumiałeś. Ale ...Dlaczego kody do booleans są kopiowane, mimo że dokumentacja tego nie wskazuje?
fn main() {
let a = 5;
let _y = double(a);
println!("{}", a);
}
fn double(x: i32) -> i32 {
x * 2
}
Początkowo spodziewałem się tego nie skompilować, ponieważ a
zostałby przeniesiony do _y
.
Byłem nieco zdezorientowany, ale I found out, że miałbym rację z wyjątkiem tego, że i32
jest wyjątkiem od reguły, ponieważ implementuje cechę kopiowania.
Spojrzałem na the Copy
trait i jak rozumiem, wymieniają wszystkie typy, które implementują tę cechę na dole.
Tak więc typ bool
nie jest obecny i dlatego założyłem, że domyślnym zachowaniem było "przeniesienie". Ale ...
fn main() {
let a = true;
let _y = change_truth(a);
println!("{}", a);
}
fn change_truth(x: bool) -> bool {
!x
}
Nie zawiedzie.
Teraz jestem bardzo zdezorientowany. Znalazłem Clone
trait, który wydaje się być ściśle związany z cechą kopiowania. Ale jeśli nie przeoczyłem tego, nie wspominają o tym w dokumencie do nauki.
Czy ktoś może podać mi więcej informacji?
Aktualizacja:
- mam złożyła issue on the Rust repository.
- Zrobiłem również pull request z pewnymi propozycjami zmian.
Oh dziękuję! Więc rozumiem to poprawnie, to jest ulga! Czy wszystkie prymitywne typy implementują cechę kopiowania? To powinno zdecydowanie być wspomniane w dokumentach, ponieważ jest to kluczowy wyjątek od najważniejszej reguły w języku. Jeśli jeszcze tego nie zrobiłeś, utworzę problem na githubie, żeby im powiedzieć :) –
Tak, wierzę, że prymitywne typy powinny implementować 'Copy'. I na pewno warto zgłosić problem, więc śmiało. – fjh
Wielkie dzięki za poświęcony czas :) Problem został utworzony: https://github.com/rust-lang/rust/issues/25893 –