Day 3:CLI 參數解析(clap)

學習目標

  • 用 clap 定義子指令(subcommand)
  • 解析參數與選項
  • 建立 CLI 骨架

今日重點

clap 子指令

use clap::{Parser, Subcommand};

#[derive(Parser)]
#[command(name = "todo", about = "CLI 任務管理工具")]
struct Cli {
    #[command(subcommand)]
    command: Command,
}

#[derive(Subcommand)]
enum Command {
    /// 新增任務
    Add {
        /// 任務內容
        title: String,
    },
    /// 列出所有任務
    List,
    /// 標記任務完成
    Done { id: u64 },
    /// 刪除任務
    Remove { id: u64 },
}

fn main() {
    let cli = Cli::parse();   // 從命令列解析

    match cli.command {
        Command::Add { title } => println!("Add: {}", title),
        Command::List => println!("List all"),
        Command::Done { id } => println!("Done: {}", id),
        Command::Remove { id } => println!("Remove: {}", id),
    }
}

使用

cargo run -- add "學習 Rust"
cargo run -- list
cargo run -- done 1
cargo run -- remove 2
cargo run -- --help   # clap 自動產生說明

練習

  1. 建立上述 CLI 骨架並測試各指令。
  2. 執行 cargo run -- add abc 確認能取出 title。
  3. 加一個選項:list --all(預設只顯示未完)。

自我檢查

  • 用 clap 定義子指令
  • 能 parse 參數
  • CLI 骨架能跑
  • 會看 --help 輸出

深入連結

  • clap 官方文件(Subcommands)