Phụ lục B: Toán tử và Ký hiệu

Phụ lục này chứa một bảng chú giải về 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 một mình hoặc trong ngữ cảnh của đường dẫn, kiểu tổng quát, ràng buộc trait, macro, thuộc tính, chú thích, tuple và dấu ngoặ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 giải thích ngắ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ể nạp chồng, trait tương ứng để nạp chồng được liệt kê.

Bảng B-1: Toán tử

Toán tửVí dụGiải thíchCó thể nạp chồng?
!ident!(...), ident!{...}, ident![...]Mở rộng macro
!!exprPhủ định bit hoặc logicNot
!=expr != exprSo sánh khác nhauPartialEq
%expr % exprPhần dư số họcRem
%=var %= exprPhần dư và gánRemAssign
&&expr, &mut exprMượn
&&type, &mut type, &'a type, &'a mut typeKiểu tham chiếu mượn
&expr & exprPhép toán AND theo bitBitAnd
&=var &= exprPhép AND bit và gánBitAndAssign
&&expr && exprAND logic có ngắt sớm
*expr * exprPhép nhân số họcMul
*=var *= exprPhép nhân và gánMulAssign
**exprGiải tham chiếuDeref
**const type, *mut typeCon trỏ thô
+trait + trait, 'a + traitRàng buộc kiểu kết hợp
+expr + exprPhép cộng số họcAdd
+=var += exprPhép cộng và gánAddAssign
,expr, exprPhân cách đối số và phần tử
-- exprPhủ định số họcNeg
-expr - exprPhép trừ số họcSub
-=var -= exprPhép trừ 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, etc.Truy cập phần tử tuple theo chỉ số
...., expr.., ..expr, expr..exprBiểu diễn phạm vi không bao gồm phần tử cuối (loại trừ phía phải)PartialOrd
..=..=expr, expr..=exprBiểu diễn phạm vi bao gồm phần tử cuốiPartialOrd
....exprCú pháp cập nhật literal struct
..variant(x, ..), struct_type { x, .. }Ràng buộc mẫu “và phần còn lại”
...expr...expr(Đã lỗi thời, dùng ..= thay) Trong mẫu: mẫu phạm vi bao gồm
/expr / exprPhép chia số họcDiv
/=var /= exprPhép chia và gánDivAssign
:pat: type, ident: typeChỉ định/ghi chú kiểu
:ident: exprKhởi tạo trường struct
:'a: loop {...}Nhãn của vòng lặp
;expr;Kết thúc câu lệnh và định nghĩa
;[...; 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 / chỉ định
==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 @ patRàng buộc mẫu
^expr ^ exprPhép XOR theo bitBitXor
^=var ^= exprPhép XOR bit và gánBitXorAssign
|pat | patCác lựa chọn trong mẫu
|expr | exprPhép OR theo bitBitOr
|=var |= exprPhép OR bit và gánBitOrAssign
||expr || exprOR logic có ngắt sớm
?expr?Truyền lỗi

Ký hiệu không phải toán tử

Danh sách sau chứa tất cả ký hiệu không hoạt động như toán tử; tức là, chúng không hành xử như 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 xuất hiện độc lập

Ký hiệuGiải thích
'identTên lifetime hoặc nhãn vòng lặp
Digits immediately followed by u8, i32, f64, usize, and so onHằng số số có kiểu cụ thể
"..."Hằng chuỗi
r"...", r#"..."#, r##"..."##, etc.Chuỗi thô, ký tự thoát không được xử lý
b"..."Chuỗi byte; tạo một mảng byte thay vì một chuỗi
br"...", br#"..."#, br##"..."##, etc.Chuỗi byte thô, kết hợp giữa chuỗi thô và chuỗi byte
'...'Hằng ký tự
b'...'Hằng byte ASCII
|…| exprClosure (hàm ẩn danh)
!Luôn là kiểu bottom rỗng cho các hàm phân kỳ
_Ràng buộc mẫu “bỏ qua”; cũng dùng để làm cho literal số nguyên dễ đọc

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

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

Ký hiệuGiải thích
ident::identĐường dẫn namespace
::pathĐường dẫn bắt đầu từ extern prelude, nơi tất cả các crate đượ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 tớ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 tới module cha của module hiện tại
type::ident, <type as trait>::identCác hằng, hàm và kiểu liên kết
<type>::...Phần tử liên kết cho một kiểu không thể đặt tên trực tiếp (ví dụ <&T>::..., <[T]>::..., v.v.)
trait::method(...)Phân biệt lời gọi phương thức bằng cách nêu tên trait định nghĩa nó
type::method(...)Phân biệt lời gọi phương thức bằng cách nêu tên kiểu mà phương thức đó được định nghĩa cho
<type as trait>::method(...)Phân biệt lời gọi phương thức bằng cách nêu cả 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 tham số kiểu tổng quát.

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ố generic cho kiểu, hàm, hoặc phương thức trong một biểu thức; thường 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 impl 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 associated type đượ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 ràng buộc tham số kiểu tổng quát bằng 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 phải là các kiểu thực hiện 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 tham chiếu có lifetime ngắn hơn 'a)
T: 'staticKiểu generic T không chứa tham chiếu mượn nào ngoài các tham chiếu 'static
'b: 'aLifetime '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 kết hợp

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

Bảng B-6: Macros và Thuộc tính

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

Bảng B-7 hiển thị các ký hiệu tạo chú thích.

Bảng B-7: Chú thích

Ký hiệuGiải thích
//Chú thích dòng
//!Chú thích tài liệu dòng nội bộ
///Chú thích tài liệu dòng ngoài
/*...*/Chú thích khối
/*!...*/Chú thích tài liệu khối nội bộ
/**...*/Chú thích tài liệu khối ngoài

Bảng B-8 hiển thị các ngữ cảnh sử dụng dấu ngoặc tròn.

Bảng B-8: Dấu ngoặc tròn

Ký hiệuGiải thích
()Tuple rỗng (còn gọi là unit), cả literal và kiểu
(expr)Biểu thức được đặt trong ngoặc
(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 dùng để khởi tạo tuple structs và biến thể enum dạng tuple

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

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

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

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

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

Ngữ cảnhGiải thích
[...]Literal mảng
[expr; len]Literal mảng chứa len bản sao của expr
[type; len]Kiểu mảng chứa len phần tử kiểu type
expr[expr]Truy cập chỉ mục bộ sưu tập. Có thể nạp chồng (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]Truy cập bộ sưu tập giống như slicing, sử dụng Range, RangeFrom, RangeTo, hoặc RangeFull làm “chỉ mục”