부록 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 | 비트 단위 AND | BitAnd |
&= | 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 | 비트 단위 배타적 OR | BitXor |
^= | var ^= expr | 비트 단위 배타적 OR 후 대입 | BitXorAssign |
| | pat | pat | 다중 패턴 | |
| | expr | expr | 비트 단위 OR | BitOr |
|= | 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 | 제네릭 매개변수 T 는 U 를 구현하는 타입으로 제한됨 |
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 사용 |