이 문서는 2판 번역본입니다.

최신 2021 에디션 문서는 https://doc.rust-kr.org 에서 확인하실 수 있습니다.

부록 B: 연산자 및 기호

이번 부록은 러스트 문법 이외에도, 경로, 제네릭, 트레잇 바운드, 매크로, 속성, 주석, 튜플, 괄호 등에 사용되는 연산자 및 기호가 수록되어 있습니다.

연산자

Table B-1 에 러스트 연산자를 나열해 놓았습니다. 각 연산자가 컨텍스트 상에 나타나는 모습과 간단한 설명, 연산자 오버로드 가능 여부 및 오버로드 가능할 경우 사용할 수 있는 트레잇 순서로 이루어져 있습니다.

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 typeRaw 포인터
+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 에 다양한 곳에서 사용할 수 있는 기호를 나열해 놓았습니다.

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 은 모듈 계층 구조의 경로를 나타내는 데 사용되는 기호를 나타냅니다.

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 는 제네릭 타입 매개변수로 사용되는 기호를 나타냅니다.

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 은 트레잇을 이용해 제네릭 매개변수의 제약 조건을 설정하는 데 사용되는 기호를 나타냅니다.

Table B-5: 트레잇 제약 조건

기호설명
T: U제네릭 매개변수 TU 를 구현한 타입일 것
T: 'a제네릭 타입 Ta 보다 긴 라이프타임을 가질 것 (해당 타입은 일시적으로 'a 보다 짧은 라이프타임을 갖는 레퍼런스를 포함할 수 없다는 의미입니다)
T : 'static제네릭 타입 T'static 이외의 빌림 참조자를 포함하지 않을 것
'b: 'a제네릭 라이프타임 'b'a 보다 긴 라이프타임을 가질 것
T: ?Sized제네릭 매개변수가 동적 사이즈 타입이 되는 것을 허용
'a + trait, trait + trait타입 제약 조건 조합

Table B-6 은 매크로를 호출 및 정의하거나 임의의 아이템에 대한 속성을 명시하는 데 사용되는 기호를 나타냅니다.

Table B-6: 매크로 및 속성

기호설명
#[meta]외부 속성
#![meta]내부 속성
$ident매크로 치환
$ident:kind매크로 캡처
$(…)…매크로 반복

Table B-7 은 주석 기호를 나타냅니다. (소속 및 외부 항목이 무엇을 의미하는지는 14-2 에 나와있습니다)

Table B-7: 주석

기호설명
//한 줄 주석
//!소속 항목 대상 한 줄 문서화 주석
///외부 항목 대상 한 줄 문서화 주석
/*...*/블록 주석
/*!...*/소속 항목 대상 블록 문서화 주석
/**...*/외부 항목 대상 블록 문서화 주석

Table B-8 은 튜플 문법에서 사용되는 기호를 나타냅니다.

Table B-8: 튜플

기호설명
()빈 튜플 (일명 '유닛'), 리터럴이자 타입임
(expr)괄호 내 표현식
(expr,)단일 개체 튜플 표현식
(type,)단일 개체 튜플 타입
(expr, ...)튜플 표현식
(type, ...)튜플 타입
expr(expr, ...)함수 호출 표현식; 튜플 struct 와 튜플 enum variants 를 초기화하는 데도 사용
ident!(...), ident!{...}, ident![...]매크로 호출
expr.0, expr.1, 기타 등등튜플 인덱싱

Table B-9 은 중괄호의 사용처를 나타냅니다.

Table B-9: 중괄호

사용처설명
{...}블록 표현식
Type {...}struct 리터럴

Table B-10 은 대괄호의 사용처를 나타냅니다.

Table B-10: 대괄호

사용처설명
[...]배열 리터럴
[expr; len]exprlen 만큼 복제한 배열 리터럴
[type; len]type 인스턴스를 len 만큼 갖는 배열 타입
expr[expr]배열 인덱싱. Index, IndexMut 을 이용해 오버로드 가능
expr[..], expr[a..], expr[..b], expr[a..b]컬렉션 슬라이싱 모양의 컬렉션 인덱싱. 인덱스로 Range, RangeFrom, RangeTo, RangeFull 을 사용