API สำหรับ derive
อาร์กิวเมนต์จากสตรักต์
API สำหรับ derive เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
derive API
derive API ช่วยให้คุณอธิบาย CLI เป็นโครงสร้าง และให้ clap สร้างตัวแยกวิเคราะห์ผ่าน #[derive(Parser)]
- มีโค้ดประกอบน้อยกว่า builder API
- ปลอดภัยด้านชนิดข้อมูล: ฟิลด์จะกลายเป็นค่าที่มีชนิดชัดเจน
เปิดใช้ด้วยฟีเจอร์ derive
โครงสร้าง Parser ขั้นต่ำ
ใส่คำกำกับ #[derive(Parser)] ให้กับโครงสร้าง แล้วเรียก Cli::parse() ใน main ฟิลด์แต่ละฟิลด์จะเป็นอาร์กิวเมนต์หนึ่งรายการ
use clap::Parser;
#[derive(Parser)]
struct Cli {
name: String,
}
fn main() {
let cli = Cli::parse();
println!("Hello, {}!", cli.name);
}ฟิลด์กลายเป็นอาร์กิวเมนต์ตามตำแหน่ง
ฟิลด์ธรรมดาอย่าง name: String คืออาร์กิวเมนต์ตามตำแหน่งที่จำเป็นต้องระบุ ชื่อฟิลด์จะกลายเป็นชื่อค่าของอาร์กิวเมนต์
use clap::Parser;
#[derive(Parser)]
struct Cli {
input: String,
output: String,
}ฟิลด์ที่ไม่บังคับ
ครอบฟิลด์ด้วย Option เพื่อทำให้ฟิลด์นั้นไม่บังคับ หากผู้ใช้ไม่ระบุค่า คุณจะได้รับ None
use clap::Parser;
#[derive(Parser)]
struct Cli {
#[arg(short, long)]
config: Option<String>,
}แฟล็กและชื่อแบบสั้น/แบบยาว
คำกำกับ #[arg(short, long)] จะสร้าง -v และ --verbose จากชื่อฟิลด์ ฟิลด์ชนิด bool จะกลายเป็นสวิตช์
use clap::Parser;
#[derive(Parser)]
struct Cli {
#[arg(short, long)]
verbose: bool,
}ค่าที่มีชนิดข้อมูล
clap จะแยกวิเคราะห์ค่าให้เป็นชนิดของฟิลด์ ฟิลด์ชนิด u32 จะปฏิเสธ input ที่ไม่ใช่ตัวเลขโดยอัตโนมัติ
use clap::Parser;
#[derive(Parser)]
struct Cli {
#[arg(short, long, default_value_t = 1)]
count: u32,
}การสร้างแบบจำลอง Cli ที่แยกวิเคราะห์แล้ว
เมื่อแยกวิเคราะห์แล้ว โครงสร้าง Cli จะเป็นข้อมูลธรรมดา ตัวอย่างที่รันได้นี้แสดงวิธีใช้ฟิลด์ต่าง ๆ หลังการแยกวิเคราะห์
struct Cli {
name: String,
count: u32,
verbose: bool,
}
fn main() {
let cli = Cli { name: "Alice".to_string(), count: 2, verbose: true };
for _ in 0..cli.count {
println!("Hello, {}! (verbose={})", cli.name, cli.verbose);
}
}คำสั่งย่อยในรูปแบบ enum
ด้วย derive API คุณสามารถใช้ enum ที่มี #[derive(Subcommand)] เพื่อสร้างแบบจำลองคำสั่งย่อย แต่ละ variant คือคำสั่งหนึ่งรายการ
use clap::{Parser, Subcommand};
#[derive(Parser)]
struct Cli {
#[command(subcommand)]
cmd: Commands,
}
#[derive(Subcommand)]
enum Commands {
Add { task: String },
List,
}การจับคู่คำสั่งย่อยของ enum
หลังจาก Cli::parse() ให้จับคู่กับ enum เพื่อส่งต่อการทำงาน ข้อมูลของ variant จะแยกโครงสร้างได้อย่างเป็นระเบียบ
use clap::Parser;
fn run(cli: Cli) {
match cli.cmd {
Commands::Add { task } => println!("add {}", task),
Commands::List => println!("list"),
}
}ข้อมูลกำกับผ่านคำกำกับ command
ใส่ #[command(name, version, about)] บนโครงสร้างเพื่อกำหนดข้อมูลกำกับของ CLI version สามารถอ่านจาก Cargo โดยอัตโนมัติ
use clap::Parser;
#[derive(Parser)]
#[command(name = "greet", version, about = "Greets people")]
struct Cli {
name: String,
}สาธิตการส่งต่อด้วย enum
รูปแบบการจับคู่ enum เป็นหัวใจของคำสั่งย่อยแบบ derive ต่อไปนี้คือตัวอย่างแนวคิดเดียวกันใน Rust ที่ทำงานได้ในตัวเอง
enum Command {
Add(String),
List,
}
fn main() {
let cmd = Command::Add("Write code".to_string());
match cmd {
Command::Add(task) => println!("Added: {}", task),
Command::List => println!("Listing"),
}
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับ derive API ของคุณ
ทบทวน
derive API เปลี่ยนโครงสร้างให้เป็นตัวแยกวิเคราะห์:
#[derive(Parser)]ร่วมกับCli::parse()- ฟิลด์ธรรมดาคืออาร์กิวเมนต์ตามตำแหน่ง ส่วน
Optionทำให้ไม่บังคับ #[arg(short, long)]สร้างแฟล็กและตัวเลือก- enum ที่มี
#[derive(Subcommand)]ใช้สร้างแบบจำลองคำสั่งย่อย
ถัดไป: การตรวจสอบค่าและการแสดงวิธีใช้ที่ขัดเกลาแล้ว
คำถามที่พบบ่อย
บทเรียน “API สำหรับ derive” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “API สำหรับ derive” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “API สำหรับ derive”
อาร์กิวเมนต์จากสตรักต์ คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “API สำหรับ derive” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม
ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน clap
- คำสั่งย่อย
- API สำหรับ derive
- การตรวจสอบและวิธีใช้