Learn Rust Coding · บทเรียน

การผูกค่าด้วย @

จับค่าและทดสอบ

บทเรียน 3 จาก 413 ขั้นตอน

การผูกค่าด้วย @ เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn Rust Coding และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

ตัวดำเนินการผูกค่าด้วย @

ตัวดำเนินการ @ ช่วยให้คุณ ทดสอบ ค่ากับรูปแบบและ ผูก ค่านั้นไว้กับชื่อในเวลาเดียวกัน จึงได้ทั้งการตรวจสอบและค่า

ปัญหาที่ตัวดำเนินการนี้แก้ไข

เมื่อใช้รูปแบบช่วงค่า คุณจะทราบว่าค่าอยู่ในช่วง แต่จะไม่สามารถเข้าถึงค่าที่แน่นอนได้ @ จะเก็บค่านั้นไว้ขณะเดียวกันก็ยังทดสอบช่วงค่าได้

การผูกค่าด้วย @ เบื้องต้น

ในที่นี้เราจับคู่ตัวเลขในช่วงค่าและเก็บค่าที่แน่นอนของมันไว้ผ่าน id

fn main() {
    let n = 5;
    match n {
        id @ 1..=5 => println!("got {id} in range"),
        _ => println!("out of range"),
    }
}

เมื่อไม่ใช้ @

เปรียบเทียบกัน: แขนงช่วงค่าแบบปกติจับคู่ได้แต่ไม่สามารถตั้งชื่อให้ค่าได้ ดังนั้นจึงไม่สามารถพิมพ์ได้ว่าตัวเลขใดจับคู่สำเร็จ

fn main() {
    let n = 5;
    match n {
        1..=5 => println!("in range (value unknown here)"),
        _ => println!("out of range"),
    }
}

@ กับข้อมูล enum

ผูกฟิลด์ไว้พร้อมกับจำกัดเงื่อนไขของฟิลด์นั้น ในที่นี้เราจะเก็บ id ไว้เฉพาะเมื่ออยู่ในช่วงค่าที่ถูกต้อง

enum Message {
    Hello { id: i32 },
}

fn main() {
    let msg = Message::Hello { id: 7 };
    match msg {
        Message::Hello { id: id @ 3..=10 } => {
            println!("valid id {id}");
        }
        Message::Hello { id } => {
            println!("other id {id}");
        }
    }
}

การผูกค่าทั้งหมด

@ ยังสามารถผูกค่าที่มีโครงสร้างทั้งหมดไว้ได้ ขณะเดียวกันรูปแบบที่ซ้อนอยู่จะตรวจสอบส่วนประกอบของค่า

fn main() {
    let point = (3, 4);
    match point {
        p @ (x, _) if x > 0 => println!("{:?} has positive x", p),
        p => println!("{:?}", p),
    }
}

การใช้ร่วมกับ |

คุณสามารถผูกค่าข้ามรูปแบบทางเลือกได้ ชื่อนั้นต้องปรากฏในทุกแขนงทางเลือก

fn main() {
    let code = 404;
    match code {
        c @ (400 | 404 | 500) => println!("error code {c}"),
        c => println!("code {c}"),
    }
}

@ ใน if let

การผูกค่าด้วย @ ใช้ใน if let ได้เช่นกัน

fn main() {
    let value = Some(50);
    if let Some(n @ 1..=100) = value {
        println!("in range: {n}");
    }
}

เมื่อใดควรใช้ @

ใช้ @ เมื่อคุณต้องการทั้งสองอย่าง:

  • จำกัดค่าด้วยช่วงค่าหรือรูปแบบย่อย
  • ใช้ค่าที่แน่นอนนั้นในเนื้อหาของแขนง

หากไม่ต้องการทั้งสองอย่าง การผูกค่าหรือรูปแบบแบบปกติจะเรียบง่ายกว่า

ความอ่านง่าย

รูปแบบนี้อ่านได้ว่า name @ pattern: ผูก name หากค่าตรงกับ pattern ตั้งชื่อให้สื่อความหมายเพื่อให้เจตนาชัดเจน

การจัดกลุ่มค่าด้วย @

การใช้งานทั่วไปคือจัดค่าลงในกลุ่มที่มีป้ายกำกับ พร้อมเก็บตัวเลขเดิมไว้สำหรับรายงาน

fn classify(temp: i32) -> String {
    match temp {
        t @ ..=0 => format!("freezing ({t})"),
        t @ 1..=20 => format!("cool ({t})"),
        t @ 21..=30 => format!("warm ({t})"),
        t => format!("hot ({t})"),
    }
}

fn main() {
    println!("{}", classify(25));
}

ตรวจสอบอย่างรวดเร็ว

ตัวดำเนินการ @ ทำหน้าที่อะไรในรูปแบบอย่าง id @ 1..=5

สรุปทบทวน

คุณได้เรียนรู้ตัวดำเนินการผูกค่าด้วย @:

  • ผูกค่าไว้กับชื่อขณะทดสอบค่ากับรูปแบบ
  • แก้ปัญหาการสูญเสียค่าที่เกิดกับรูปแบบช่วงค่า
  • ใช้ได้กับข้อมูล enum, ทูเพิล, ทางเลือกด้วย | และ if let
  • ใช้เมื่อต้องการทั้งข้อจำกัดและค่าดังกล่าว
เริ่มต้นได้ฟรี

เรียนรู้ Rust ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
39
บทเรียน
144

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

บทเรียน “การผูกค่าด้วย @” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การผูกค่าด้วย @” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การผูกค่าด้วย @”

จับค่าและทดสอบ คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การผูกค่าด้วย @” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม

ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. เจาะลึก match
  2. if let และ while let
  3. การผูกค่าด้วย @
  4. การแยกโครงสร้าง
← กลับไปที่ Learn Rust Coding