Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

부록 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 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.ident(expr, ...)메서드 호출
.expr.0, expr.1, and so on튜플 인덱싱
...., 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 => exprmatch 팔 문법의 일부
>expr > expr크다 비교PartialOrd
>=expr >= expr크거나 같다 비교PartialOrd
>>expr >> expr오른쪽 시프트Shr
>>=var >>= expr오른쪽 시프트 후 대입ShrAssign
@ident @ pat패턴 바인딩
^expr ^ expr비트 XORBitXor
^=var ^= expr비트 XOR 후 대입BitXorAssign
|pat | pat패턴 대안
|expr | expr비트 ORBitOr
|=var |= expr비트 OR 후 대입BitOrAssign
||expr || expr단락 평가되는 논리 OR
?expr?오류 전파

비연산자 기호

다음 표들에는 연산자로 기능하지 않는 모든 기호가 들어 있습니다. 즉, 함수 호출이나 메서드 호출처럼 동작하지 않는 기호들입니다.

표 B-2는 단독으로 나타나며 여러 위치에서 유효한 기호를 보여 줍니다.

표 B-2: 단독 문법

기호설명
'ident이름 있는 라이프타임 또는 루프 레이블
u8, i32, f64, usize 등이 바로 뒤따르는 숫자특정 타입의 숫자 리터럴
"..."문자열 리터럴
r"...", r#"..."#, r##"..."##로우 문자열 리터럴, 이스케이프 문자를 처리하지 않음
b"..."바이트 문자열 리터럴, 문자열 대신 바이트 배열을 생성
br"...", br#"..."#, br##"..."##로우 바이트 문자열 리터럴, 로우 문자열과 바이트 문자열의 결합
'...'문자 리터럴
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<...> typehigher ranked lifetime 바운드
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: 소괄호

기호설명
()빈 튜플(즉 unit), 리터럴이자 타입
(expr)괄호로 감싼 표현식
(expr,)원소가 하나인 튜플 표현식
(type,)원소가 하나인 튜플 타입
(expr, ...)튜플 표현식
(type, ...)튜플 타입
expr(expr, ...)함수 호출 표현식, 튜플 구조체와 튜플 열거형 variant 초기화에도 사용됨

표 B-9는 중괄호가 사용되는 문맥을 보여 줍니다.

표 B-9: 중괄호

문맥설명
{...}블록 표현식
Type {...}구조체 리터럴

표 B-10은 대괄호가 사용되는 문맥을 보여 줍니다.

표 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 을 “인덱스” 로 사용해 컬렉션 슬라이싱처럼 보이게 하는 컬렉션 인덱싱