https://www.yes24.com/Product/Goods/116789691
https://www.yes24.com/Product/Goods/116586619
실습하면서 공부하고 정리한 것을 올린것입니다.
fn main() {
// 블록 1
{
let s1 = String::from("인생에 뜻을 세우는 데 있어 늦은 때라곤 없다.");
let s3 = String::from("계단을 밟아야 계단 위에 올라설 수 있다");
// 블록 2
{
let s2 = s1;
println!("{}", s2);
}
// 블록2 중괄호 끝나는 시점에 s2의 값은 파기된다
println!("{}", s3);
}
// s3의 값도 파기된다.
}
{} 중괄호를 벗어나면 값이 파기되고 범위 안에서 이용한 변수에 대해 자동으로 drop함수를 호출한다.
결과1 호출: 인생에 뜻을 세우는 데 있어 늦은 때라곤 없다.
결과2 호출: 계단을 밟아야 계단 위에 올라설 수 있다
스코프의 또다른 예
struct와 enum 타입은 Copy가 아니다.
fn main() {
struct Label {
number: u32,
}
fn print(l: Label) {
println!("STAMP: {}", l.number);
}
let l = Label { number: 3 };
print(l);
println!("My label number is: {}", l.number);
}
에러내용: error[E0382]: borrow of moved value: `l`
Label은 Copy가 아니므로 이를 print함수에 소유권이 전달되고 복귀하기 전에 drop된다. 만약 struct에 모든 타입이 Copy이고 싶으면 어트리뷰트(#[derive(Copy,Clone)]를 써서 만들 수 있다.
'Rust' 카테고리의 다른 글
러스트 모듈(pub mod) (0) | 2024.01.09 |
---|---|
러스트 제네릭(generic) 함수 정의 (0) | 2024.01.01 |
러스트 프로그래밍 - 참조 & 와 빌림(borrow) (0) | 2023.12.17 |
러스트 프로그래밍 - 힙(heap)영역과 스택(stack)영역 (0) | 2023.12.17 |
러스트 프로그래밍 - 소유권과 이동 (0) | 2023.12.17 |