Phụ lục B: Các toán tử và ký hiệu

Phụ lục này chứa danh mục các cú pháp của Rust, bao gồm các toán tử và các ký hiệu khác xuất hiện độc lập hoặc trong ngữ cảnh của đường dẫn, generics, ràng buộc trait, macro, thuộc tính, bình luận, tuple và dấu ngoặc.

Các toán tử

Bảng B-1 chứa các toán tử trong Rust, một ví dụ về cách toán tử xuất hiện trong ngữ cảnh, một lời giải thích ngắn gọn và liệu toán tử đó có thể được nạp chồng hay không. Nếu một toán tử có thể được nạp chồng, trait có liên quan được sử dụng để nạp chồng toán tử đó được liệt kê.

Bảng B-1: Các toán tử

Toán tửVí dụGiải thíchNạp chồng?
!ident!(...), ident!{...}, ident![...]Mở rộng macro
!!exprPhủ định bit hoặc logicNot
!=expr != exprSo sánh không bằngPartialEq
%expr % exprPhép chia lấy dưRem
%=var %= exprPhép chia lấy dư và gánRemAssign
&&expr, &mut exprMượn (borrow)
&&type, &mut type, &'a type, &'a mut typeKiểu con trỏ mượn
&expr & exprPhép AND bitBitAnd
&=var &= exprPhép AND bit và gánBitAndAssign
&&expr && exprPhép AND logic ngắn mạch
*expr * exprPhép nhân số họcMul
*=var *= exprPhép nhân số học và gánMulAssign
**exprDereference (giải tham chiếu)Deref
**const type, *mut typeCon trỏ thô
+trait + trait, 'a + traitRàng buộc kiểu phức hợp
+expr + exprPhép cộng số họcAdd
+=var += exprPhép cộng số học và gánAddAssign
,expr, exprPhân cách đối số và phần tử
-- exprPhủ định số học (đổi dấu)Neg
-expr - exprPhép trừ số họcSub
-=var -= exprPhép trừ số học và gánSubAssign
->fn(...) -> type, |...| -> typeKiểu trả về của hàm và closure
.expr.identTruy cập trường
.expr.ident(expr, ...)Gọi phương thức
.expr.0, expr.1, v.v.Truy cập phần tử của tuple theo chỉ mục
...., expr.., ..expr, expr..exprKhoảng (range) loại trừ bên phảiPartialOrd
..=..=expr, expr..=exprKhoảng (range) bao gồm bên phảiPartialOrd
....exprCú pháp cập nhật biểu thức struct
..variant(x, ..), struct_type { x, .. }Gán mẫu "và phần còn lại"
...expr...expr(Đã lỗi thời, sử dụng ..= thay thế) Trong mẫu: mẫu khoảng bao gồm
/expr / exprPhép chia số họcDiv
/=var /= exprPhép chia số học và gánDivAssign
:pat: type, ident: typeRàng buộc
:ident: exprKhởi tạo trường struct
:'a: loop {...}Nhãn vòng lặp
;expr;Kết thúc câu lệnh và mục
;[...; len]Một phần của cú pháp mảng kích thước cố định
<<expr << exprDịch tráiShl
<<=var <<= exprDịch trái và gánShlAssign
<expr < exprSo sánh nhỏ hơnPartialOrd
<=expr <= exprSo sánh nhỏ hơn hoặc bằngPartialOrd
=var = expr, ident = typeGán/tương đương
==expr == exprSo sánh bằngPartialEq
=>pat => exprMột phần của cú pháp nhánh match
>expr > exprSo sánh lớn hơnPartialOrd
>=expr >= exprSo sánh lớn hơn hoặc bằngPartialOrd
>>expr >> exprDịch phảiShr
>>=var >>= exprDịch phải và gánShrAssign
@ident @ patGán mẫu
^expr ^ exprPhép XOR bitBitXor
^=var ^= exprPhép XOR bit và gánBitXorAssign
|pat | patCác mẫu thay thế
|expr | exprPhép OR bitBitOr
|=var |= exprPhép OR bit và gánBitOrAssign
||expr || exprPhép OR logic ngắn mạch
?expr?Truyền lỗi

Các ký hiệu không phải toán tử

Danh sách sau đây chứa tất cả các ký hiệu không hoạt động như các toán tử; nghĩa là, chúng không hoạt động như một lời gọi hàm hoặc phương thức.

Bảng B-2 hiển thị các ký hiệu xuất hiện độc lập và hợp lệ trong nhiều vị trí khác nhau.

Bảng B-2: Cú pháp độc lập

Ký hiệuGiải thích
'identTên Lifetime hoặc nhãn vòng lặp
...u8, ...i32, ...f64, ...usize, v.v.Hằng số số học có kiểu rõ ràng
"..."Chuỗi ký tự
r"...", r#"..."#, r##"..."##, v.v.Chuỗi ký tự thô, các ký tự thoát không được xử lý
b"..."Chuỗi byte; tạo mảng byte thay vì chuỗi
br"...", br#"..."#, br##"..."##, v.v.Chuỗi byte thô, kết hợp của chuỗi thô và chuỗi byte
'...'Ký tự
b'...'Byte ASCII
|...| exprClosure
!Kiểu bottom luôn trống cho các hàm phân kỳ
_Gán mẫu "bị bỏ qua"; cũng được sử dụng để làm cho số nguyên dễ đọc hơn

Bảng B-3 hiển thị các ký hiệu xuất hiện trong ngữ cảnh của đường dẫn thông qua hệ thống phân cấp module đến một mục.

Bảng B-3: Cú pháp liên quan đến đường dẫn

Ký hiệuGiải thích
ident::identĐường dẫn namespace
::pathĐường dẫn tương đối với extern prelude, nơi tất cả các crate khác được đặt gốc (tức là, một đường dẫn tuyệt đối rõ ràng bao gồm tên crate)
self::pathĐường dẫn tương đối với module hiện tại (tức là, một đường dẫn tương đối rõ ràng).
super::pathĐường dẫn tương đối với module cha của module hiện tại
type::ident, <type as trait>::identCác hằng số, hàm và kiểu liên kết
<type>::...Mục liên kết cho một kiểu không thể được đặt tên trực tiếp (ví dụ, <&T>::..., <[T]>::..., v.v.)
trait::method(...)Làm rõ lời gọi phương thức bằng cách đặt tên trait định nghĩa nó
type::method(...)Làm rõ lời gọi phương thức bằng cách đặt tên kiểu mà nó được định nghĩa
<type as trait>::method(...)Làm rõ lời gọi phương thức bằng cách đặt tên trait và kiểu

Bảng B-4 hiển thị các ký hiệu xuất hiện trong ngữ cảnh của việc sử dụng các tham số kiểu generic.

Bảng B-4: Generics

Ký hiệuGiải thích
path<...>Chỉ định tham số cho kiểu generic trong một kiểu (ví dụ, Vec<u8>)
path::<...>, method::<...>Chỉ định tham số cho kiểu generic, hàm hoặc phương thức trong một biểu thức; thường được gọi là turbofish (ví dụ, "42".parse::<i32>())
fn ident<...> ...Định nghĩa hàm generic
struct ident<...> ...Định nghĩa struct generic
enum ident<...> ...Định nghĩa enum generic
impl<...> ...Định nghĩa triển khai generic
for<...> typeRàng buộc lifetime bậc cao hơn
type<ident=type>Một kiểu generic trong đó một hoặc nhiều kiểu liên kết có gán cụ thể (ví dụ, Iterator<Item=T>)

Bảng B-5 hiển thị các ký hiệu xuất hiện trong ngữ cảnh của việc ràng buộc các tham số kiểu generic với các ràng buộc trait.

Bảng B-5: Ràng buộc Trait

Ký hiệuGiải thích
T: UTham số generic T bị ràng buộc vào các kiểu triển khai U
T: 'aKiểu generic T phải tồn tại lâu hơn lifetime 'a (nghĩa là kiểu không thể chứa bất kỳ tham chiếu nào có lifetime ngắn hơn 'a)
T: 'staticKiểu generic T không chứa các tham chiếu được mượn ngoài tham chiếu 'static
'b: 'aLifetime generic 'b phải tồn tại lâu hơn lifetime 'a
T: ?SizedCho phép tham số kiểu generic là một kiểu có kích thước động
'a + trait, trait + traitRàng buộc kiểu phức hợp

Bảng B-6 hiển thị các ký hiệu xuất hiện trong ngữ cảnh của việc gọi hoặc định nghĩa macro và chỉ định thuộc tính trên một mục.

Bảng B-6: Macro và thuộc tính

Ký hiệuGiải thích
#[meta]Thuộc tính ngoài
#![meta]Thuộc tính trong
$identThay thế macro
$ident:kindCapture macro
$(…)…Lặp lại macro
ident!(...), ident!{...}, ident![...]Gọi macro

Bảng B-7 hiển thị các ký hiệu tạo bình luận.

Bảng B-7: Bình luận

Ký hiệuGiải thích
//Bình luận dòng
//!Bình luận tài liệu dòng bên trong
///Bình luận tài liệu dòng bên ngoài
/*...*/Bình luận khối
/*!...*/Bình luận tài liệu khối bên trong
/**...*/Bình luận tài liệu khối bên ngoài

Bảng B-8 hiển thị các ngữ cảnh mà dấu ngoặc đơn được sử dụng.

Bảng B-8: Dấu ngoặc đơn

Ký hiệuGiải thích
()Tuple rỗng (còn gọi là unit), cả kiểu và giá trị
(expr)Biểu thức trong ngoặc đơn
(expr,)Biểu thức tuple một phần tử
(type,)Kiểu tuple một phần tử
(expr, ...)Biểu thức tuple
(type, ...)Kiểu tuple
expr(expr, ...)Biểu thức gọi hàm; cũng được sử dụng để khởi tạo struct tuple và biến thể enum tuple

Bảng B-9 hiển thị các ngữ cảnh mà dấu ngoặc nhọn được sử dụng.

Bảng B-9: Dấu ngoặc nhọn

Ngữ cảnhGiải thích
{...}Biểu thức khối
Type {...}Giá trị struct

Bảng B-10 hiển thị các ngữ cảnh mà dấu ngoặc vuông được sử dụng.

Bảng B-10: Dấu ngoặc vuông

Ngữ cảnhGiải thích
[...]Giá trị mảng
[expr; len]Giá trị mảng chứa len bản sao của expr
[type; len]Kiểu mảng chứa len thể hiện của type
expr[expr]Truy cập phần tử của collection. Có thể nạp chồng (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]Truy cập phần tử của collection thành lát cắt collection, sử dụng Range, RangeFrom, RangeTo hoặc RangeFull làm "chỉ mục"