Rust:
การพิมพ์ผลลัพธ์การแก้ไขโค้ด
วิธีการ:
หากต้องการพิมพ์สิ่งที่ง่ายๆ ให้ใช้ println!
หากคุณต้องการพิมพ์ค่าเพื่อการแก้ไขปัญหา dbg!
ก็มีประโยชน์
fn main() {
let mut vec = vec![1, 2, 3];
// การพิมพ์ข้อมูลพื้นฐาน
println!("Hello, Rustaceans!");
// การกำหนดรูปแบบการแก้ไขปัญหาด้วย println! โดยใช้ `{:?}`
println!("{:?}", vec);
// การแก้ไขปัญหาด้วย `dbg!`, พิมพ์ไปยัง stderr และคืนค่ากลับ
dbg!(&vec);
// การแก้ไข vec หลังจากใช้ `dbg!`
vec.push(4);
dbg!(vec);
}
ตัวอย่างผลลัพธ์:
Hello, Rustaceans!
[1, 2, 3]
[src/main.rs:9] &vec = [
1,
2,
3,
]
[src/main.rs:13] vec = [
1,
2,
3,
4,
]
การศึกษาอย่างลึกซึ้ง
การพิมพ์ข้อมูลเพื่อแก้ปัญหาเป็นส่วนหนึ่งที่ตรงไปตรงมาของการเขียนโปรแกรมตั้งแต่ยุคแรกเริ่ม ความเรียบง่ายของมันมักทำให้เป็นตัวเลือกแรกๆ สำหรับการวินิจฉัยปัญหาอย่างรวดเร็ว
ใน Rust, println!
เหมาะกับการแสดงข้อความที่เป็นมิตรกับผู้ใช้ ความวิเศษมากับ dbg!
, ซึ่งเปิดตัวใน Rust 1.32, ซึ่งพิมพ์ทั้งค่าและตำแหน่งของมันในโค้ด มันส่งออกผ่าน standard error (stderr), จึงไม่จะผสมกับ standard output (stdout) และสามารถเปลี่ยนทิศทางได้แยกต่างหากหากจำเป็น
สำหรับประเภทที่ซับซ้อน, คุณสามารถสืบทอด trait Debug
เพื่อสร้างรูปแบบอัตโนมัติที่ println!
และ dbg!
สามารถใช้ได้ นั่นคือสิ่งที่การประกาศ #[derive(Debug)]
ทำเหนือ structs และ enums ของคุณ
ในฐานะทางเลือกอื่น, โปรแกรมบันทึกข้อมูลที่เหมาะสมอย่าง log
และ env_logger
มีอยู่, และหากคุณต้องการควบคุมในแบบเฉพาะเจาะจง, พิจารณาใช้เดบักเกอร์เช่น gdb
หรือ lldb
, ซึ่งทำงานกับ Rust ผ่านการรวมเข้าด้วยกันเช่น rust-gdb
หรือ rust-lldb
ดูเพิ่มเติม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการพิมพ์และรูปแบบการแก้ไขปัญหาใน Rust:
- หนังสือ Rust เกี่ยวกับ
println!
และการกำหนดรูปแบบ: https://doc.rust-lang.org/std/fmt/index.html - เอกสารของแมโคร
dbg!
: https://doc.rust-lang.org/std/macro.dbg.html - คู่มือทางการสำหรับการแก้ไขปัญหาด้วย
gdb
และlldb
: https://rust-lang.github.io/rustup-components-history - ตู้คอนเทนเนอร์
log
สำหรับการเข้าใกล้การบันทึกข้อมูลที่มีโครงสร้างมากขึ้น: https://crates.io/crates/log - ตู้คอนเทนเนอร์
env_logger
, การบันทึกที่เป็นที่นิยมสำหรับฟาซาดlog
: https://crates.io/crates/env_logger