Rust는 소유권, 빌림, 트레이트 등 문법도 복잡하지만, 기호도 처음 보는 것이 많아 헷갈리게 하는데 정리해봤습니다. 인쇄해놓고 보면 좋을 듯 합니다.
| 기호 / 표기 | 의미 | 설명 | 예시 | 영어 읽기 | 한국어 읽기 |
| ! | 매크로 | 이름 뒤에 붙어 해당 이름이 매크로임을 표시 | println!, dbg!, vec! | macro / bang | 매크로 |
| ? | 에러 전파 | Result나 Option에서 에러를 즉시 반환 | let x = foo()?; | question mark | 물음표 |
| :: | 경로 연산자 | 모듈, 구조체, 함수 등의 경로 지정 | std::io::Result | double colon | 더블 콜론 / 경로 연산자 |
| * | 역참조 | 참조 값을 직접 접근 | *r = 10; | asterisk / deref | 별 / 역참조 |
| _ | 와일드카드 | 사용하지 않는 값, 이름 무시 | let _ = foo(); | underscore | 언더스코어 / 무시 |
| -> | 함수 반환 타입 | 함수 반환을 표시 | fn foo() -> i32 { 5 } | arrow | 화살표 / 반환 |
| => | 매칭 암시 | match에서 패턴 결과 지정 | match x { 1 => “one”, _ => “other” } | fat arrow | 두꺼운 화살표 / → |
| ::< | turbofish | 제네릭 타입을 명시적으로 지정 | Vec::<i32>::new() | turbofish | turbofish / 제네릭 타입 명시 |
| .. | 범위 연산자 | 일부 범위, 구조체 업데이트 등에 사용 | 0..5, ..Default::default() | dot dot | 범위 / 나머지 필드 |
| ..= | 포함 범위 | 끝 값을 포함하는 범위 | 0..=5 | dot dot equal | 포함 범위 |
| & | 참조 | 변수/값을 빌려오기 | let r = &x; | reference | 참조 |
| &mut | 가변 참조 | 변수/값을 가변으로 빌려오기 | let mr = &mut y; | mutable reference | 가변 참조 |
| ref/ ref mut | 패턴용 참조 | 패턴 매칭에서 참조를 얻음 | let Point { x: ref r, .. } = p; | ref / ref mut | 참조 / 가변 참조 패턴 |
| mut | 가변성 | 변수 또는 참조를 변경 가능하게 | let mut x = 5; | mut | 뮤트 / 가변 |
| ..(패턴) | 구조체/튜플 패턴 | 일부 필드만 바인딩하고 나머지 무시 | Point { x, .. } | dot dot | 범위 / 나머지 필드 무시 |
| ‘ | 라이프타임 | 참조가 유효한 범위를 지정 | &’static str | single quote / tick | 라이프타임 / 스태틱 라이프타임 |
ChatGPT의 도움을 받았는데, ChatGPT도 헷갈려 하네요.
예를 들어 *를 asterisk라고 하고, !를 bang이라고 하고 헷갈리네요.
하나 더 참고
'Underscore'와 'underbar'는 같은 기호(_)를 가리키는 다른 이름으로, 'underscore'가 정식 명칭이고 'underbar'는 비정식적인 표현입니다.