부록 B: 연산자와 기호
이 부록에는 자체적으로 또는 경로, 제네릭, 트레이트 바운드, 매크로, 속성, 주석, 튜플, 괄호 등의 컨텍스트에서 나타나는 연산자 및 기타 기호를 포함하는 러스트 문법에 대한 용어집이 수록되어 있습니다.
연산자
표 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는 자체적으로 나타나는 기호들을 보여주며, 다양한 위치에서 유효합니다.
기호 | 설명 |
---|---|
'ident | 기명 라이프타임 혹은 루프 라벨 |
...u8 , ...i32 , ...f64 , ...usize , etc. | 특정 타입의 수치 값 리터럴 |
"..." | 문자열 리터럴 |
r"..." , r#"..."# , r##"..."## , etc. | 이스케이프 문자가 처리되지 않는 원시 문자열 리터럴 |
b"..." | 바이트 문자열 리터럴; 문자열 대신 바이트 배열 구성하기 |
br"..." , br#"..."# , br##"..."## , etc. | 원시 바이트 문자열 리터럴, 원시 문자열과 바이트 문자열 리터럴의 조합 |
'...' | 문자 리터럴 |
b'...' | ASCII 바이트 리터럴 |
|...| expr | 클로저 |
! | 발산 함수를 위한 항상 비어있는 하단 타입 |
_ | ‘무시되는’ 패턴 바인딩; 정수형 리터럴을 읽기 편하게 만드는 데도 사용됨 |
표 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는 제네릭 타입 매개변수를 사용하는 컨텍스트에서 나타나는 기호들을 보여줍니다.
기호 | 설명 |
---|---|
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는 트레이트 바운드를 사용하여 제네릭 타입 매개변수를 제한하는 컨텍스트에서 나타나는 기호들을 보여줍니다.
기호 | 설명 |
---|---|
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은 매크로를 호출하거나 정의하는 컨텍스트 및 아이템에 속성을 지정하는 컨텍스트에서 나타나는 기호들을 보여줍니다.
기호 | 설명 |
---|---|
#[meta] | 외부 속성 |
#![meta] | 내부 속성 |
$ident | 매크로 치환 |
$ident:kind | 매크로 캡처 |
$(…)… | 매크로 반복 |
ident!(...) , ident!{...} , ident![...] | 매크로 호출 |
표 B-7은 주석을 생성하는 기호들을 보여줍니다.
기호 | 설명 |
---|---|
// | 한 줄 주석 |
//! | 내부 한 줄 문서화 주석 |
/// | 외부 한 줄 문서화 주석 |
/*...*/ | 블록 주석 |
/*!...*/ | 내부 블록 문서화 주석 |
/**...*/ | 외부 블록 문서화 주석 |
표 B-8은 튜플을 사용하는 컨텍스트에서 나타나는 기호들을 보여줍니다.
기호 | 설명 |
---|---|
() | 빈 튜플 (일명 유닛), 리터럴이자 타입 |
(expr) | 괄호로 묶인 표현식 |
(expr,) | 단일 요소 튜플 표현식 |
(type,) | 단일 요소 튜플 타입 |
(expr, ...) | 튜플 표현식 |
(type, ...) | 튜플 타입 |
expr(expr, ...) | 함수 호출 표현식; 튜플 struct 와 튜플 enum 배리언트의 초기화에도 사용됨 |
expr.0 , expr.1 , etc. | 튜플 인덱싱 |
표 B-9는 중괄호를 사용하는 컨텍스트를 보여줍니다.
컨텍스트 | 설명 |
---|---|
{...} | 블록 표현식 |
Type {...} | struct 리터럴 |
표 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 사용 |