Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ภาคผนวก 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ตัวดำเนินการทางบิต ANDBitAnd
&=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ตัวดำเนินการทางบิต XORBitXor
^=var ^= exprตัวดำเนินการทางบิต XOR และการกำหนดค่าBitXorAssign
|pat | patทางเลือกในรูปแบบ (Pattern alternatives)
|expr | exprตัวดำเนินการทางบิต ORBitOr
|=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 เป็น “ดัชนีชี้วัด”