0Pricing
Learn Rust Coding · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน clap
  2. คำสั่งย่อย
  3. API สำหรับ derive
  4. การตรวจสอบและวิธีใช้
← กลับไปที่ Learn Rust Coding