이 문서는 2판 번역본입니다.
최신 2021 에디션 문서는 https://doc.rust-kr.org 에서 확인하실 수 있습니다.
부록 B: 연산자 및 기호
이번 부록은 러스트 문법 이외에도, 경로, 제네릭, 트레잇 바운드, 매크로, 속성, 주석, 튜플, 괄호 등에 사용되는 연산자 및 기호가 수록되어 있습니다.
연산자
Table B-1 에 러스트 연산자를 나열해 놓았습니다. 각 연산자가 컨텍스트 상에 나타나는 모습과 간단한 설명, 연산자 오버로드 가능 여부 및 오버로드 가능할 경우 사용할 수 있는 트레잇 순서로 이루어져 있습니다.
연산자 | 예시 | 설명 | 오버로드 가능 여부 |
---|---|---|---|
! | ident!(...) , ident!{...} , ident![...] | 매크로 전개 | |
! | !expr | 비트 및 논리 보수 | Not |
!= | var != expr | 불일치 비교 | PartialEq |
% | expr % expr | 나머지 연산 | Rem |
%= | var %= expr | 나머지 연산 후 대입 | RemAssign |
& | &expr , &mut expr | 빌림 | |
& | &type , &mut type , &'a type , &'a mut type | 빌림 포인터 | |
& | expr & expr | 비트 단위 AND 연산 | BitAnd |
&= | var &= expr | 비트 단위 AND 연산 후 대입 | BitAndAssign |
&& | expr && expr | 논리 AND | |
* | expr * expr | 곱하기 연산 | Mul |
*= | var *= expr | 곱셈 후 대입 | MulAssign |
* | *expr | 역 참조 | |
* | *const type , *mut type | Raw 포인터 | |
+ | trait + trait , 'a + trait | 타입 제약 조건 조합 | |
+ | expr + expr | 더하기 연산 | Add |
+= | var += expr | 더하기 연산 후 대입 | AddAssign |
, | expr, expr | 인수 및 요소 구분자 | |
- | - expr | 부정 연산 | Neg |
- | expr - expr | 빼기 연산 | Sub |
-= | var -= expr | 빼기 연산 후 대입 | SubAssign |
-> | fn(...) -> type , |...| -> type | 함수와 클로저 반환 타입 | |
. | expr.ident | 멤버 접근 | |
.. | .. , expr.. , ..expr , expr..expr | 상한을 제외한 범위 리터럴 | |
.. | ..expr | 구조체 갱신법 | |
.. | variant(x, ..) , struct_type { x, .. } | “나머지” 패턴 바인딩 | |
... | expr...expr | 상한을 포함한 범위 패턴 (패턴 내) | |
/ | expr / expr | 나누기 연산 | Div |
/= | var /= expr | 나누기 연산 후 대입 | DivAssign |
: | pat: type , ident: type | 제약 조건 | |
: | ident: expr | 구조체 필드 초기화 | |
: | 'a: loop {...} | loop 표식 | |
; | expr; | 구문 및 요소 종결자 | |
; | [...; len] | 고정 크기 배열 문법의 일부 | |
<< | expr << expr | 좌측 쉬프트 연산 | Shl |
<<= | var <<= expr | 좌측 쉬프트 연산 후 대입 | ShlAssign |
< | expr < expr | 대소 비교 (소) | PartialOrd |
<= | expr <= expr | 동등 및 대소 비교 (소) | PartialOrd |
= | var = expr , ident = type | 대입/등가 | |
== | expr == expr | 동등 비교 | PartialEq |
=> | pat => expr | 갈래 문법의 일부 | |
> | expr > expr | 대소 비교 (대) | PartialOrd |
>= | expr >= expr | 동등 및 대소 비교 (대) | PartialOrd |
>> | expr >> expr | 우측 쉬프트 연산 | Shr |
>>= | var >>= expr | 우측 쉬프트 연산 후 대입 | ShrAssign |
@ | ident @ pat | 패턴 바인딩 | |
^ | expr ^ expr | 비트 단위 XOR 연산 | BitXor |
^= | var ^= expr | 비트 단윈 XOR 연산 후 대입 | BitXorAssign |
| | pat | pat | 다중 패턴 | |
| | expr | expr | 비트 단위 OR 연산 | BitOr |
|= | var |= expr | 비트 단위 OR 연산 후 대입 | BitOrAssign |
|| | expr || expr | 논리 OR 연산 | |
? | expr? | 에러 전파 |
연산자 이외의 기호
다음은 연산자와는 다르게 동작하는 (함수나 메소드를 호출했을 때 일어나는 현상과 유사하지 않다는 의미입니다) 문자 목록입니다.
Table B-2 에 다양한 곳에서 사용할 수 있는 기호를 나열해 놓았습니다.
기호 | 설명 |
---|---|
'ident | 라이프라임 지정 및 loop 표식 |
...u8 , ...i32 , ...f64 , ...usize , 기타 등등 | 특정 타입 정수 리터럴 |
"..." | 스트링 리터럴 |
r"..." , r#"..."# , r##"..."## , 기타 등등 | Raw 스트링 리터럴, 이스케이프 문자를 처리하지 않음 |
b"..." | 바이트 스트링 리터럴; 문자열 대신 [u8] 이용 |
br"..." , br#"..."# , br##"..."## , 기타 등등 | Raw 바이트 스트링 리터럴, Raw 스트링과 바이트 스트링을 합친 것 |
'...' | 문자 리터럴 |
b'...' | ASCII 바이트 리터럴 |
|...| expr | 클로저 |
! | 함수 분기를 위해 존재하는 의미를 갖지 않는 빈 타입 |
_ | "무시된" 패턴 바인딩; 정수 링터럴의 가독성을 높이는 데에도 사용됨 |
Table B-3 은 모듈 계층 구조의 경로를 나타내는 데 사용되는 기호를 나타냅니다.
기호 | 설명 |
---|---|
ident::ident | 네임스페이스 경로 |
::path | 크레이트의 루트 디렉토리를 기준으로 한 상대 경로 (즉, 명시적인 절대 경로) |
self::path | 현재 모듈을 기준으로 한 상대 경로 (즉, 명시적인 상대 경로). |
super::path | 현재 모듈의 부모 모듈을 기준으로 한 상대 경로 |
type::ident , <type as trait>::ident | 연관 상수, 함수 및 유형 |
<type>::... | 직접 명명할 수 없는 타입에 연관된 항목 (예시 <&T>::... , <[T]>::... , 기타 등등) |
trait::method(...) | 해당 메소드를 정의한 트레잇 이름으로 메소드 호출을 명확화 |
type::method(...) | 정의된 타입명을 이용해 메소드 호출을 명확화 |
<type as trait>::method(...) | 타입과 트레잇 이름을 이용해 메소드 호출을 명확화 |
Table B-4 는 제네릭 타입 매개변수로 사용되는 기호를 나타냅니다.
기호 | 설명 |
---|---|
path<...> | 타입의 제네릭 매개변수 명시 (예시 Vec<u8> ) |
path::<...> , method::<...> | 제네릭 타입, 함수, 메소드 등의 표현식에 매개변수 명시; turbofish 로도 불림 (예시 "42".parse::<i32>() ) |
fn ident<...> ... | 제네릭 함수 정의 |
struct ident<...> ... | 제네릭 구조체 정의 |
enum ident<...> ... | 제네릭 열거체 정의 |
impl<...> ... | 제네릭 구현 정의 |
for<...> type | 고 랭크 라이프타임 제약 |
type<ident=type> | 하나 이상의 관련 타입에 특정 할당을 갖는 제네릭 타입 (예시 Iterator<Item=T> ) |
Table B-5 은 트레잇을 이용해 제네릭 매개변수의 제약 조건을 설정하는 데 사용되는 기호를 나타냅니다.
기호 | 설명 |
---|---|
T: U | 제네릭 매개변수 T 는 U 를 구현한 타입일 것 |
T: 'a | 제네릭 타입 T 는 a 보다 긴 라이프타임을 가질 것 (해당 타입은 일시적으로 'a 보다 짧은 라이프타임을 갖는 레퍼런스를 포함할 수 없다는 의미입니다) |
T : 'static | 제네릭 타입 T 는 'static 이외의 빌림 참조자를 포함하지 않을 것 |
'b: 'a | 제네릭 라이프타임 'b 는 'a 보다 긴 라이프타임을 가질 것 |
T: ?Sized | 제네릭 매개변수가 동적 사이즈 타입이 되는 것을 허용 |
'a + trait , trait + trait | 타입 제약 조건 조합 |
Table B-6 은 매크로를 호출 및 정의하거나 임의의 아이템에 대한 속성을 명시하는 데 사용되는 기호를 나타냅니다.
기호 | 설명 |
---|---|
#[meta] | 외부 속성 |
#![meta] | 내부 속성 |
$ident | 매크로 치환 |
$ident:kind | 매크로 캡처 |
$(…)… | 매크로 반복 |
Table B-7 은 주석 기호를 나타냅니다. (소속 및 외부 항목이 무엇을 의미하는지는 14-2 에 나와있습니다)
기호 | 설명 |
---|---|
// | 한 줄 주석 |
//! | 소속 항목 대상 한 줄 문서화 주석 |
/// | 외부 항목 대상 한 줄 문서화 주석 |
/*...*/ | 블록 주석 |
/*!...*/ | 소속 항목 대상 블록 문서화 주석 |
/**...*/ | 외부 항목 대상 블록 문서화 주석 |
Table B-8 은 튜플 문법에서 사용되는 기호를 나타냅니다.
기호 | 설명 |
---|---|
() | 빈 튜플 (일명 '유닛'), 리터럴이자 타입임 |
(expr) | 괄호 내 표현식 |
(expr,) | 단일 개체 튜플 표현식 |
(type,) | 단일 개체 튜플 타입 |
(expr, ...) | 튜플 표현식 |
(type, ...) | 튜플 타입 |
expr(expr, ...) | 함수 호출 표현식; 튜플 struct 와 튜플 enum variants 를 초기화하는 데도 사용 |
ident!(...) , ident!{...} , ident![...] | 매크로 호출 |
expr.0 , expr.1 , 기타 등등 | 튜플 인덱싱 |
Table B-9 은 중괄호의 사용처를 나타냅니다.
사용처 | 설명 |
---|---|
{...} | 블록 표현식 |
Type {...} | struct 리터럴 |
Table B-10 은 대괄호의 사용처를 나타냅니다.
사용처 | 설명 |
---|---|
[...] | 배열 리터럴 |
[expr; len] | expr 을 len 만큼 복제한 배열 리터럴 |
[type; len] | type 인스턴스를 len 만큼 갖는 배열 타입 |
expr[expr] | 배열 인덱싱. Index , IndexMut 을 이용해 오버로드 가능 |
expr[..] , expr[a..] , expr[..b] , expr[a..b] | 컬렉션 슬라이싱 모양의 컬렉션 인덱싱. 인덱스로 Range , RangeFrom , RangeTo , RangeFull 을 사용 |