부록 B: 연산자와 기호

이 부록에는 자체적으로 또는 경로, 제네릭, 트레이트 바운드, 매크로, 속성, 주석, 튜플, 괄호 등의 컨텍스트에서 나타나는 연산자 및 기타 기호를 포함하는 러스트 문법에 대한 용어집이 수록되어 있습니다.

연산자

표 B-1은 러스트의 연산자, 컨텍스트에서 해당 연산자의 등장 예시, 간단한 설명, 그리고 해당 연산자가 오버로드 가능한지 여부를 담고 있습니다. 만약 연산자가 오버로드 가능하다면, 해당 연산자를 오버로딩하기 위해 사용해야 하는 트레이트가 나열되어 있습니다.

표 B-1: 연산자

연산자예시설명오버로드 가능
!ident!(...), ident!{...}, ident![...]매크로 전개
!!expr비트 단위 혹은 논리적 보수Not
!=expr != expr불일치 비교PartialEq
%expr % expr나머지 연산Rem
%=var %= expr나머지 연산 후 대입RemAssign
&&expr, &mut expr대여
&&type, &mut type, &'a type, &'a mut type대여 포인터 타입
&expr & expr비트 단위 ANDBitAnd
&=var &= expr비트 단위 AND 후 대입BitAndAssign
&&expr && expr논리적 AND
*expr * expr산술 곱셈Mul
*=var *= expr산술 곱셈 후 대입MulAssign
**expr역참조Deref
**const type, *mut type원시 포인터
+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상한 배제 범위 리터럴PartialOrd
..=..=expr, expr..=expr상한 포함 범위 리터럴PartialOrd
....expr구조체 리터럴 업데이트 문법
..variant(x, ..), struct_type { x, .. }‘나머지’ 패턴 바인딩
...expr...expr(사용 중단됨, 대신 ..=를 사용) 패턴 내에서: 경계를 포함하는 범위 패턴
/expr / expr산술 나눗셈Div
/=var /= expr산술 나눗셈 후 대입DivAssign
:pat: type, ident: type제약
:ident: expr구조체 필드 초기화
:'a: 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비트 단위 배타적 ORBitXor
^=var ^= expr비트 단위 배타적 OR 후 대입BitXorAssign
|pat | pat다중 패턴
|expr | expr비트 단위 ORBitOr
|=var |= expr비트 단위 OR 후 대입BitOrAssign
||expr || expr논리적 OR
?expr?에러 전파

비연산자 기호

다음 목록에는 연산자로 동작하지 않는 모든 기호를 수록했습니다; 즉, 이 기호들은 함수 또는 메서드 호출처럼 동작하지 않습니다.

표 B-2는 자체적으로 나타나는 기호들을 보여주며, 다양한 위치에서 유효합니다.

표 B-2: 독립형 문법

기호설명
'ident기명 라이프타임 혹은 루프 라벨
...u8, ...i32, ...f64, ...usize, etc.특정 타입의 수치 값 리터럴
"..."문자열 리터럴
r"...", r#"..."#, r##"..."##, etc.이스케이프 문자가 처리되지 않는 원시 문자열 리터럴
b"..."바이트 문자열 리터럴; 문자열 대신 바이트 배열 구성하기
br"...", br#"..."#, br##"..."##, etc.원시 바이트 문자열 리터럴, 원시 문자열과 바이트 문자열 리터럴의 조합
'...'문자 리터럴
b'...'ASCII 바이트 리터럴
|...| expr클로저
!발산 함수를 위한 항상 비어있는 하단 타입
_‘무시되는’ 패턴 바인딩; 정수형 리터럴을 읽기 편하게 만드는 데도 사용됨

표 B-3는 모듈 계층을 통해 아이템에 도달하는 경로의 컨텍스트에서 나타나는 기호들을 보여줍니다.

표 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(...)트레이트와 타입 이름으로 메서드 호출을 명확하게 하기

표 B-4는 제네릭 타입 매개변수를 사용하는 컨텍스트에서 나타나는 기호들을 보여줍니다.

표 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>)

표 B-5는 트레이트 바운드를 사용하여 제네릭 타입 매개변수를 제한하는 컨텍스트에서 나타나는 기호들을 보여줍니다.

표 B-5: 트레이트 바운드 제약 조건

기호설명
T: U제네릭 매개변수 TU를 구현하는 타입으로 제한됨
T: 'a제네릭 타입 T'a보다 긴 라이프타임을 가져야 함 (즉 해당 타입은 일시적으로 'a보다 짧은 라이프타임을 가진 어떤 참조자도 가질 수 없습니다)
T: 'static제네릭 타입 T'static 이외의 빌린 참조자를 포함하지 않음
'b: 'a제네릭 라이프타임 'b'a보다 긴 라이프타임을 가져야 함
T: ?Sized제네릭 타입 매개변수에 동적 크기 타입 사용이 가능하도록 허용하기
'a + trait, trait + trait타입 제약 조건 조합

표 B-6은 매크로를 호출하거나 정의하는 컨텍스트 및 아이템에 속성을 지정하는 컨텍스트에서 나타나는 기호들을 보여줍니다.

표 B-6: 매크로와 속성

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

표 B-7은 주석을 생성하는 기호들을 보여줍니다.

표 B-7: 주석

기호설명
//한 줄 주석
//!내부 한 줄 문서화 주석
///외부 한 줄 문서화 주석
/*...*/블록 주석
/*!...*/내부 블록 문서화 주석
/**...*/외부 블록 문서화 주석

표 B-8은 튜플을 사용하는 컨텍스트에서 나타나는 기호들을 보여줍니다.

표 B-8: 튜플

기호설명
()빈 튜플 (일명 유닛), 리터럴이자 타입
(expr)괄호로 묶인 표현식
(expr,)단일 요소 튜플 표현식
(type,)단일 요소 튜플 타입
(expr, ...)튜플 표현식
(type, ...)튜플 타입
expr(expr, ...)함수 호출 표현식; 튜플 struct와 튜플 enum 배리언트의 초기화에도 사용됨
expr.0, expr.1, etc.튜플 인덱싱

표 B-9는 중괄호를 사용하는 컨텍스트를 보여줍니다.

표 B-9: 중괄호

컨텍스트설명
{...}블록 표현식
Type {...}struct 리터럴

표 B-10은 대괄호를 사용하는 컨텍스트를 보여줍니다.

표 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 사용