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

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