설렁 설렁 : 순수 취미 목적 학습 ~~ 주 2회 설렁 설렁 목표 ~~
가변성은 인스턴스 전체가 지니게 된다. 일부 필드만 가변으로 만들 수 없다.
..을 사용한 해체할당 문법이 존재(구조체 업데이트)한다. 다만 자바스크립트와 다르게 항상 해체 할당 표현식이 가장 아래에 와야한다.
아래 코드에서 user2를 생성한 이후에는 user1을 더 이상 사용할 수 없다. user1의 username 필드의 String이 user2로 이동(힙, 이동)하기 때문이다. 반면, user1에서 active와 sign_in_count값만 사용했다면 user2를 만든 이후에도 user1은 유효(복사, 스택)하다.
struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}
fn main() {
let user1 = User {
active: true,
username: String::from("someone"),
email: String::from("user1@example.com"),
sign_in_count: 1,
};
let user2 = User {
email: String::from("user2@example.com"),
..user1
};
}
러스트는 디버깅 정보를 출력하는 기능을 내장하고 있으며 이를 사용하려면 명시적인 동의가 필요하다
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
전체 모듈 트리 최상위에 crate 라는 모듈이 암묵적으로 위치한다.
부모 모듈 안에 있는 아이템은 자식 모듈 내 비공개 아이템을 사용할 수 없지만, 자식 모듈 내 아이템은 조상 모듈 내 아이템을 사용할 수 있다. 그 이유는 자식 모듈의 세부 구현은 감싸져서 숨겨져 있지만, 자식 모듈 내에서는 자신이 정의된 콘텍스트를 볼 수 있기 때문이다.