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

FAQ — คำถามที่พบบ่อย

รวบรวมคำถามที่นักพัฒนามักถามเกี่ยวกับ Rust และเนื้อหาในหนังสือเล่มนี้ พร้อมคำตอบสั้นๆ และลิงก์ไปยังบทที่เกี่ยวข้อง


ทั่วไป

Q: หนังสือเล่มนี้เหมาะกับใคร?

A: เหมาะกับนักพัฒนาที่มีพื้นฐาน Rust เบื้องต้นแล้ว (เช่น อ่าน The Rust Programming Language จบแล้ว) และต้องการเข้าใจปัญหาที่พบบ่อยในการเขียน Rust จริงๆ พร้อมวิธีแก้ไขอย่างเป็นระบบ

Q: ต้องอ่านตามลำดับไหม?

A: ไม่จำเป็นครับ แต่ละบทเขียนให้อ่านแยกกันได้ อย่างไรก็ตาม หากคุณเป็นมือใหม่ แนะนำให้อ่านตามลำดับ Part โดยเริ่มจาก Part I: Ownership, Borrowing และ Lifetime

Q: Rust เวอร์ชันไหนที่ใช้ในหนังสือ?

A: โค้ดตัวอย่างทั้งหมดทดสอบกับ Rust 1.75 ขึ้นไป (Stable) แต่แนวคิดส่วนใหญ่ใช้ได้กับทุกเวอร์ชันที่รองรับ Edition 2021


Ownership, Borrowing & Lifetime

Q: ทำไมเรียก angle.cos() แล้ว angle ยังใช้ได้อยู่ ทั้งๆ ที่ cos รับ self?

A: เพราะ f32 implement Copy Trait ทำให้ Rust ทำสำเนาค่าไปใช้ในฟังก์ชันแทนการ Move ตัวแปรต้นทางจึงยังใช้ได้ อ่านเพิ่มเติมได้ที่ การเป็นเจ้าของของ self

Q: self, &self, &mut self ต่างกันอย่างไร?

A:

  • self — ยึดครอง (Move) หรือทำสำเนา (Copy) ค่าเข้าไปในฟังก์ชัน
  • &self — ยืมอ่านอย่างเดียว (Shared/Immutable Borrow)
  • &mut self — ยืมไปแก้ไข (Exclusive/Mutable Borrow)

อ่านรายละเอียดและตัวอย่างได้ที่ การเป็นเจ้าของของ self

Q: Anonymous Lifetime '_ คืออะไร? ใช้เมื่อไหร่?

A: '_ คือ Lifetime ที่บอกให้ Rust อนุมาน (infer) ให้อัตโนมัติ ใช้เมื่อต้องการระบุว่า Return Type มี Lifetime แต่ไม่ต้องการเขียน Lifetime Parameter แบบเต็ม เช่น:

#![allow(unused)]
fn main() {
fn to_other_ctx(&mut self) -> OtherCtx<'_> { ... }
}

อ่านเพิ่มเติมได้ที่ Reborrowing และการแปลงโครงสร้างข้อมูล

Q: ทำไม read_line ถึงต่อท้าย (append) ข้อมูลแทนที่จะเขียนทับ?

A: เป็นการออกแบบเพื่อ Performance — ผู้เรียกสามารถนำ Buffer กลับมาใช้ซ้ำได้โดยไม่ต้อง Allocate หน่วยความจำใหม่ทุกครั้ง วิธีแก้คือเรียก .clear() ก่อน read_line ทุกรอบของลูป อ่านเพิ่มเติมได้ที่ กับดักของ read_line ในลูป

Q: Reborrowing คืออะไร? ต่างจาก Borrowing ปกติอย่างไร?

A: Reborrowing คือการที่ Rust ยืม Reference ที่มีอยู่แล้วมาใช้ต่อ โดยสร้าง Reference ใหม่ที่มี Lifetime สั้นกว่า Reference ต้นฉบับ ซึ่งช่วยให้ Mutable Reference สามารถถูกส่งต่อไปยังฟังก์ชันอื่นได้โดยไม่เสีย Ownership ของ Reference เดิม อ่านเพิ่มเติมได้ที่ Reborrowing และการแปลงโครงสร้างข้อมูล


การมีส่วนร่วม

Q: พบข้อผิดพลาดในหนังสือ จะแจ้งได้ที่ไหน?

A: สามารถเปิด Issue ได้ที่ GitHub Repository ของโปรเจกต์ครับ

Q: อยากเขียนบทใหม่หรือแก้ไขเนื้อหา ทำได้ไหม?

A: ยินดีเลยครับ สามารถ Fork Repository แล้วส่ง Pull Request เข้ามาได้ ดูรายละเอียดเพิ่มเติมที่ รายชื่อผู้ร่วมพัฒนา


มีคำถามอื่นที่ไม่อยู่ในรายการนี้? สามารถเปิด Issue ใน GitHub Repository ได้เลยครับ เราจะเพิ่มคำตอบเข้ามาในหน้านี้