2017-08-25 10 views
6

साथ काम नहीं कर रहा है आप एक श्रृंखला पर पैटर्न मैच के लिए if let उपयोग कर सकते हैं:एकाधिक पैटर्न जाने अगर

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

लेकिन मैं इसे कई पैटर्न पर काम नहीं कर सकते हैं:

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

मैंने सोचा दूसरा if let से वंचित:

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

तो क्या देता है? क्या मैं गलत वाक्यविन्यास का उपयोग कर रहा हूं? क्या मेरी उम्मीद है कि कई पैटर्नों को सिर्फ गुमराह करना चाहिए? क्या यह अभी लागू नहीं हुआ है?

playground

+1

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

+0

@interjay आह धन्यवाद, इसलिए यह अभी लागू नहीं हुआ है। जिथब मुद्दे कई पैटर्न का जिक्र करता है लेकिन फिर चर्चा गार्ड पर केंद्रित होती है। किसी कारण से (बदसूरत परिणामस्वरूप वाक्यविन्यास?) मैं कम आश्चर्यचकित था कि गार्ड अगर काम करते हैं तो काम नहीं करते हैं। रेंज काम कर रहे कई पैटर्न बनाम काम नहीं कर रहा है मेरे लिए थोड़ा कम सहज ... –

उत्तर

8

if let सिर्फ कई पैटर्न (RFC issue 935 देखें) का समर्थन नहीं करता। इसके बजाय match का उपयोग करें।

संबंधित मुद्दे