ภาคผนวก B: ตัวดำเนินการและสัญลักษณ์
ภาคผนวกนี้ประกอบด้วยอภิธานศัพท์เกี่ยวกับไวยากรณ์ของ Rust ซึ่งรวมถึงตัวดำเนินการ (operators) และสัญลักษณ์อื่นๆ ที่ปรากฏแยกกัน หรือปรากฏในบริบทของเส้นทาง (paths), เจเนอริก (generics), ขอบเขตของเทรต (trait bounds), มาโคร (macros), แอตทริบิวต์ (attributes), ความคิดเห็น (comments), ทูเพิล (tuples) และวงเล็บแบบต่างๆ (brackets)
ตัวดำเนินการ (Operators)
ตาราง B-1 ประกอบด้วยตัวดำเนินการในภาษา Rust, ตัวอย่างการแสดงตัวดำเนินการในบริบทต่างๆ, คำอธิบายสั้นๆ และข้อมูลว่าตัวดำเนินการนั้นสามารถทำโอเวอร์โหลด (overloadable) ได้หรือไม่ หากตัวดำเนินการสามารถโอเวอร์โหลดได้ จะมีการระบุเทรต (trait) ที่เกี่ยวข้องที่ต้องนำมาใช้ในการทำโอเวอร์โหลดนั้นไว้ด้วย
ตาราง B-1: ตัวดำเนินการ
| ตัวดำเนินการ | ตัวอย่าง | คำอธิบาย | โอเวอร์โหลดได้หรือไม่? |
|---|---|---|---|
! | ident!(...), ident!{...}, ident![...] | การขยายมาโคร (Macro expansion) | |
! | !expr | ตัวเติมเต็มทางบิตหรือทางตรรกะ (Bitwise or logical complement) | Not |
!= | expr != expr | การเปรียบเทียบความไม่เท่ากัน | PartialEq |
% | expr % expr | เศษเหลือจากการหารทางคณิตศาสตร์ (Arithmetic remainder) | Rem |
%= | var %= expr | เศษเหลือจากการหารและการกำหนดค่าทางคณิตศาสตร์ | RemAssign |
& | &expr, &mut expr | การยืมค่า (Borrow) | |
& | &type, &mut type, &'a type, &'a mut type | ชนิดข้อมูลตัวชี้ที่ถูกยืม (Borrowed pointer type) | |
& | expr & expr | ตัวดำเนินการทางบิต AND | BitAnd |
&= | var &= expr | ตัวดำเนินการทางบิต AND และการกำหนดค่า | BitAndAssign |
&& | expr && expr | ตัวดำเนินการทางตรรกะ AND แบบประเมินค่าสั้น (Short-circuiting) | |
* | expr * expr | การคูณทางคณิตศาสตร์ | Mul |
*= | var *= expr | การคูณและการกำหนดค่าทางคณิตศาสตร์ | MulAssign |
* | *expr | การอ้างอิงกลับ (Dereference) | Deref |
* | *const type, *mut type | ตัวชี้ดิบ (Raw pointer) | |
+ | trait + trait, 'a + trait | ข้อจำกัดของชนิดข้อมูลแบบผสม (Compound type constraint) | |
+ | expr + expr | การบวกทางคณิตศาสตร์ | Add |
+= | var += expr | การบวกและการกำหนดค่าทางคณิตศาสตร์ | AddAssign |
, | expr, expr | ตัวคั่นอาร์กิวเมนต์และองค์ประกอบ (Argument and element separator) | |
- | - expr | ค่าปฏิเสธทางคณิตศาสตร์ (Arithmetic negation) | Neg |
- | expr - expr | การลบทางคณิตศาสตร์ | Sub |
-= | var -= expr | การลบและการกำหนดค่าทางคณิตศาสตร์ | SubAssign |
-> | fn(...) -> type, |…| -> type | ชนิดข้อมูลที่ส่งกลับของฟังก์ชันและโคลเชอร์ | |
. | expr.ident | การเข้าถึงฟิลด์ (Field access) | |
. | expr.ident(expr, ...) | การเรียกใช้งานเมธอด (Method call) | |
. | expr.0, expr.1, and so on | การระบุตรรกชี้วัดทูเพิล (Tuple indexing) | |
.. | .., expr.., ..expr, expr..expr | ค่าช่วงที่ไม่รวมขอบขวา (Right-exclusive range literal) | PartialOrd |
..= | ..=expr, expr..=expr | ค่าช่วงที่รวมขอบขวา (Right-inclusive range literal) | PartialOrd |
.. | ..expr | ไวยากรณ์อัปเดตโครงสร้างข้อมูลตามค่าเดิม (Struct literal update syntax) | |
.. | variant(x, ..), struct_type { x, .. } | การผูกรูปแบบ “และข้อมูลส่วนที่เหลือ” (“And the rest” pattern binding) | |
... | expr...expr | (เลิกใช้งานแล้ว ให้ใช้ ..= แทน) ในรูปแบบ: รูปแบบช่วงที่รวมค่าขอบขวา | |
/ | expr / expr | การหารทางคณิตศาสตร์ | Div |
/= | var /= expr | การหารและการกำหนดค่าทางคณิตศาสตร์ | DivAssign |
: | pat: type, ident: type | ข้อจำกัด (Constraints) | |
: | ident: expr | ตัวกำหนดค่าเริ่มต้นฟิลด์โครงสร้างข้อมูล (Struct field initializer) | |
: | 'a: loop {...} | ป้ายชื่อลูป (Loop label) | |
; | expr; | ตัวปิดประโยคคำสั่งและไอเทม (Statement and item terminator) | |
; | [...; len] | ส่วนหนึ่งของไวยากรณ์อาร์เรย์ขนาดคงที่ | |
<< | expr << expr | การเลื่อนบิตไปทางซ้าย (Left-shift) | Shl |
<<= | var <<= expr | การเลื่อนบิตไปทางซ้ายและการกำหนดค่า | ShlAssign |
< | expr < expr | การเปรียบเทียบน้อยกว่า | PartialOrd |
<= | expr <= expr | การเปรียบเทียบน้อยกว่าหรือเท่ากับ | PartialOrd |
= | var = expr, ident = type | การกำหนดค่า/ความเท่าเทียม (Assignment/equivalence) | |
== | expr == expr | การเปรียบเทียบความเท่ากัน | PartialEq |
=> | pat => expr | ส่วนหนึ่งของไวยากรณ์แขนงการจับคู่ (match arm syntax) | |
> | expr > expr | การเปรียบเทียบมากกว่า | PartialOrd |
>= | expr >= expr | การเปรียบเทียบมากกว่าหรือเท่ากับ | PartialOrd |
>> | expr >> expr | การเลื่อนบิตไปทางขวา (Right-shift) | Shr |
>>= | var >>= expr | การเลื่อนบิตไปทางขวาและการกำหนดค่า | ShrAssign |
@ | ident @ pat | การผูกรูปแบบ (Pattern binding) | |
^ | expr ^ expr | ตัวดำเนินการทางบิต XOR | BitXor |
^= | var ^= expr | ตัวดำเนินการทางบิต XOR และการกำหนดค่า | BitXorAssign |
| | pat | pat | ทางเลือกในรูปแบบ (Pattern alternatives) | |
| | expr | expr | ตัวดำเนินการทางบิต OR | BitOr |
|= | var |= expr | ตัวดำเนินการทางบิต OR และการกำหนดค่า | BitOrAssign |
|| | expr || expr | ตัวดำเนินการทางตรรกะ OR แบบประเมินค่าสั้น (Short-circuiting) | |
? | expr? | การเผยแพร่ข้อผิดพลาด (Error propagation) |
สัญลักษณ์ที่ไม่ใช่ตัวดำเนินการ (Non-operator Symbols)
ตารางต่อไปนี้ประกอบด้วยสัญลักษณ์ทั้งหมดที่ไม่ได้ทำหน้าที่เป็นตัวดำเนินการ กล่าวคือ สัญลักษณ์เหล่านี้ไม่มีพฤติกรรมเสมือนการเรียกฟังก์ชันหรือเมธอด
ตาราง B-2 แสดงสัญลักษณ์ที่ปรากฏเดี่ยวๆ และสามารถใช้งานได้ในหลากหลายตำแหน่ง
ตาราง B-2: ไวยากรณ์แบบแยกเดี่ยว (Stand-alone Syntax)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
'ident | อายุขัยที่ระบุชื่อ (Named lifetime) หรือป้ายชื่อลูป (loop label) |
ตัวเลขตามด้วย u8, i32, f64, usize และอื่นๆ ในทันที | ค่าตรงตัวเชิงตัวเลขตามชนิดข้อมูลเฉพาะ (Numeric literal of specific type) |
"..." | ค่าตรงตัวประเภทข้อความ (String literal) |
r"...", r#"..."#, r##"..."## และค่าต่อๆ ไป | ค่าตรงตัวประเภทข้อความดิบ (Raw string literal); โดยจะไม่มีการประมวลผลอักขระหลีก (escape characters) |
b"..." | ค่าตรงตัวข้อความไบต์ (Byte string literal); สร้างเป็นอาร์เรย์ของไบต์แทนที่จะเป็นข้อความธรรมดา |
br"...", br#"..."#, br##"..."## และค่าต่อๆ ไป | ค่าตรงตัวข้อความไบต์ดิบ (Raw byte string literal); เป็นการรวมกันของรูปแบบข้อความดิบและข้อความไบต์ |
'...' | ค่าตรงตัวประเภทอักขระ (Character literal) |
b'...' | ค่าตรงตัวไบต์ ASCII (ASCII byte literal) |
|…| expr | โคลเชอร์ (Closure) |
! | ชนิดข้อมูลล่างสุดที่ว่างเปล่าเสมอ (Always-empty bottom type) สำหรับฟังก์ชันที่ไม่มีวันสิ้นสุด (diverging functions) |
_ | การผูกรูปแบบ “ที่ถูกละเว้น” (“Ignored” pattern binding); และใช้สำหรับแบ่งกลุ่มเพื่อทำให้อ่านค่าตรงตัวของตัวเลขจำนวนเต็มได้ง่ายขึ้น |
ตาราง B-3 แสดงสัญลักษณ์ที่ปรากฏในบริบทของเส้นทาง (path) ผ่านลำดับชั้นของโมดูลเพื่อเข้าถึงไอเทม
ตาราง B-3: ไวยากรณ์ที่เกี่ยวข้องกับเส้นทาง (Path-Related Syntax)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
ident::ident | เส้นทางขอบเขตชื่อ (Namespace path) |
::path | เส้นทางที่อ้างอิงกับรากของเครต (หมายถึงเส้นทางแบบสัมบูรณ์อย่างชัดเจน) |
self::path | เส้นทางที่อ้างอิงกับโมดูลปัจจุบัน (หมายถึงเส้นทางแบบสัมพัทธ์อย่างชัดเจน) |
super::path | เส้นทางที่อ้างอิงกับโมดูลแม่ของโมดูลปัจจุบัน |
type::ident, <type as trait>::ident | ค่าคงที่, ฟังก์ชัน และชนิดข้อมูลที่เชื่อมโยงกัน (Associated constants, functions, and types) |
<type>::... | ไอเทมที่เชื่อมโยงสำหรับชนิดข้อมูลที่ไม่สามารถระบุชื่อโดยตรงได้ (เช่น <&T>::..., <[T]>::... และค่าต่อๆ ไป) |
trait::method(...) | หลีกเลี่ยงความกำกวมในการเรียกใช้เมธอดโดยการระบุชื่อเทรตที่นิยามเมธอดนั้น |
type::method(...) | หลีกเลี่ยงความกำกวมในการเรียกใช้เมธอดโดยการระบุชื่อชนิดข้อมูลที่เมธอดนั้นนิยามไว้ |
<type as trait>::method(...) | หลีกเลี่ยงความกำกวมในการเรียกใช้เมธอดโดยการระบุทั้งชื่อเทรตและชนิดข้อมูล |
ตาราง B-4 แสดงสัญลักษณ์ที่ปรากฏในบริบทของการใช้พารามิเตอร์ชนิดเจเนอริก (generic type parameters)
ตาราง B-4: เจเนอริก (Generics)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
path<...> | ระบุพารามิเตอร์สำหรับชนิดเจเนอริกในชนิดข้อมูล (เช่น Vec<u8>) |
path::<...>, method::<...> | ระบุพารามิเตอร์สำหรับชนิดเจเนอริก ฟังก์ชัน หรือเมธอดในรูปของนิพจน์ มักจะเรียกกันว่า turbofish (เช่น "42".parse::<i32>()) |
fn ident<...> ... | นิยามฟังก์ชันแบบเจเนอริก |
struct ident<...> ... | นิยามโครงสร้างข้อมูลแบบเจเนอริก |
enum ident<...> ... | นิยามประเภทแจกแจงรายละเอียดแบบเจเนอริก |
impl<...> ... | นิยามการอิมพลิเมนต์แบบเจเนอริก |
for<...> type | ขอบเขตอายุขัยในระดับที่สูงกว่า (Higher ranked lifetime bounds) |
type<ident=type> | ชนิดเจเนอริกที่ชนิดข้อมูลที่เชื่อมโยงกันตั้งแต่หนึ่งชนิดขึ้นไปมีการกำหนดค่าเฉพาะ (เช่น Iterator<Item=T>) |
ตาราง B-5 แสดงสัญลักษณ์ที่ปรากฏในบริบทของการจำกัดขอบเขตพารามิเตอร์ชนิดเจเนอริกด้วยขอบเขตของเทรต (trait bounds)
ตาราง B-5: ข้อจำกัดขอบเขตของเทรต (Trait Bound Constraints)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
T: U | พารามิเตอร์เจเนอริก T ถูกจำกัดให้เฉพาะชนิดข้อมูลที่อิมพลิเมนต์ U เท่านั้น |
T: 'a | ชนิดเจเนอริก T จะต้องมีชีวิตอยู่ยืนยาวกว่าอายุขัย 'a (หมายความว่าชนิดข้อมูลดังกล่าวไม่สามารถมีตัวอ้างอิงที่มีอายุขัยสั้นกว่า 'a ปะปนอยู่ได้ไม่ว่าจะในทางอ้อมก็ตาม) |
T: 'static | ชนิดเจเนอริก T จะต้องไม่มีการอ้างอิงที่ถูกยืม ยกเว้นที่เป็นการอ้างอิงแบบ 'static |
'b: 'a | อายุขัยเจเนอริก 'b จะต้องมีชีวิตอยู่ยืนยาวกว่าอายุขัย 'a |
T: ?Sized | อนุญาตให้พารามิเตอร์ชนิดเจเนอริกเป็นชนิดข้อมูลที่มีขนาดเปลี่ยนไปมาได้แบบไดนามิก (dynamically sized type) |
'a + trait, trait + trait | ข้อจำกัดของชนิดข้อมูลแบบผสม |
ตาราง B-6 แสดงสัญลักษณ์ที่ปรากฏในบริบทของการเรียกใช้หรือนิยามมาโคร และการระบุแอตทริบิวต์บนไอเทม
ตาราง B-6: มาโครและแอตทริบิวต์ (Macros and Attributes)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
#[meta] | แอตทริบิวต์ด้านนอก (Outer attribute) |
#![meta] | แอตทริบิวต์ด้านใน (Inner attribute) |
$ident | การแทนที่ด้วยมาโคร (Macro substitution) |
$ident:kind | ตัวแปรอภิมานของมาโคร (Macro metavariable) |
$(...)... | การทำซ้ำของมาโคร (Macro repetition) |
ident!(...), ident!{...}, ident![...] | การเรียกใช้งานมาโคร (Macro invocation) |
ตาราง B-7 แสดงสัญลักษณ์ที่ใช้สำหรับสร้างความคิดเห็น (comments)
ตาราง B-7: ความคิดเห็น (Comments)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
// | ความคิดเห็นแบบบรรทัดเดียว (Line comment) |
//! | คำอธิบายเอกสารแบบบรรทัดเดียวด้านใน (Inner line doc comment) |
/// | คำอธิบายเอกสารแบบบรรทัดเดียวด้านนอก (Outer line doc comment) |
/*...*/ | ความคิดเห็นแบบบล็อก (Block comment) |
/*!...*/ | คำอธิบายเอกสารแบบบล็อกด้านใน (Inner block doc comment) |
/**...*/ | คำอธิบายเอกสารแบบบล็อกด้านนอก (Outer block doc comment) |
ตาราง B-8 แสดงบริบทที่มีการใช้งานวงเล็บกลม (parentheses)
ตาราง B-8: วงเล็บกลม (Parentheses)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
() | ทูเพิลว่างเปล่า (หรือเรียกว่ายูนิต - unit) ซึ่งเป็นได้ทั้งค่าตรงตัวและชนิดข้อมูล |
(expr) | นิพจน์ภายในวงเล็บกลม |
(expr,) | นิพจน์ประเภททูเพิลที่มีองค์ประกอบเดียว |
(type,) | ชนิดข้อมูลประเภททูเพิลที่มีองค์ประกอบเดียว |
(expr, ...) | นิพจน์ประเภททูเพิล |
(type, ...) | ชนิดข้อมูลประเภททูเพิล |
expr(expr, ...) | นิพจน์การเรียกใช้ฟังก์ชัน; และยังใช้เพื่อกำหนดค่าเริ่มต้นให้ทูเพิลโครงสร้างข้อมูล (struct) และตัวแปรชนิดแจกแจงแบบทูเพิล (enum variants) |
ตาราง B-9 แสดงบริบทที่มีการใช้งานวงเล็บปีกกา (curly brackets)
ตาราง B-9: วงเล็บปีกกา (Curly Brackets)
| บริบท | คำอธิบาย |
|---|---|
{...} | นิพจน์รูปแบบบล็อก (Block expression) |
Type {...} | ค่าตรงตัวประเภทโครงสร้างข้อมูล (Struct literal) |
ตาราง B-10 แสดงบริบทที่มีการใช้งานวงเล็บเหลี่ยม (square brackets)
ตาราง B-10: วงเล็บเหลี่ยม (Square Brackets)
| บริบท | คำอธิบาย |
|---|---|
[...] | ค่าตรงตัวประเภทอาร์เรย์ (Array literal) |
[expr; len] | ค่าตรงตัวประเภทอาร์เรย์ที่ประกอบด้วยสำเนาของ expr จำนวน len ชุด |
[type; len] | ชนิดข้อมูลประเภทอาร์เรย์ที่ประกอบด้วยอ็อบเจกต์ประเภท type จำนวน len ตัว |
expr[expr] | การระบุตรรกชี้วัดในคอลเลกชัน (Collection indexing); สามารถทำโอเวอร์โหลดได้ (Index, IndexMut) |
expr[..], expr[a..], expr[..b], expr[a..b] | การระบุตรรกชี้วัดในคอลเลกชันโดยเลียนแบบการทำสไลซ์ (slicing) ในคอลเลกชัน โดยใช้ Range, RangeFrom, RangeTo หรือ RangeFull เป็น “ดัชนีชี้วัด” |