2017-08-25 15 views
6

Bạn có thể sử dụng if let để mô hình phù hợp trên một khoảng:Nhiều mô hình không làm việc với nếu chúng ta hãy

let n=1 
if let 1...3 = n { println!("found in range") } 

nhưng tôi không thể làm cho nó hoạt trên nhiều mô hình:

// this does not compile 
if let 1 | 2 | 3 = n { println!("found in pattern") } 
//  -^ unexpected token 

Tôi nghĩ thứ hai if let desugared to:

// this does compile and work 
match n { 
    1 | 2 | 3 => println!("found in pattern"), 
    _ => {} 
} 

vì vậy những gì cung cấp? Tôi có sử dụng sai cú pháp không? Tôi có kỳ vọng rằng nhiều mô hình nên hoạt động sai lầm? Đây có phải là không thực hiện?

playground

+1

https://github.com/rust-lang/rfcs/issues/935 – interjay

+0

@interjay ah cảm ơn, vì vậy nó không được triển khai. Vấn đề github không đề cập đến nhiều mẫu nhưng sau đó cuộc thảo luận tập trung vào các vệ sĩ. Đối với một số lý do (cú pháp kết quả xấu xí?) Tôi đã ít ngạc nhiên rằng các vệ sĩ không làm việc với nếu cho phép. Phạm vi làm việc so với nhiều mẫu không hoạt động có vẻ ít trực quan hơn đối với tôi ... –

Trả lời

8

if let chỉ không hỗ trợ nhiều mô hình (xem RFC issue 935). Sử dụng match để thay thế.

Các vấn đề liên quan