मैं जाँच करने के लिए एक स्ट्रिंग '$' है या नहीं करना चाहते हैं और अगर वहाँ '$' के बाद कुछ है:क्या एक ही मैच हाथ में एक मैच गार्ड के साथ दो पैटर्न गठबंधन करना संभव है?
fn test(s: String) {
match s.find('$') {
None | (Some(pos) if pos == s.len() - 1) => {
expr1();
}
_ => { expr2(); }
}
}
लेकिन यह संकलन नहीं करता है::
मैं इस कोड की कोशिश कीerror: expected one of `)` or `,`, found `if`
यह एक मैच हाथ में None
और Some
गठबंधन करने के लिए असंभव है?
यदि हां, तो क्या यह एक अलग तरीका है जिसे इसे expr1()
डुप्लिकेट करने के लिए एक अलग फ़ंक्शन में छोड़कर छोड़ने का कोई आसान तरीका नहीं है?
यह काम करता है, लेकिन इस तथ्य पर निर्भर करता है कि '$' ASCII है और इस प्रकार एक बाइट लेता है। एक और सामान्य समाधान ['char :: len_utf8'] (https://doc.rust-lang.org/std/primitive.char.html#method.len_utf8) का उपयोग कर सकता है:' i! = S.len() - 'c'.len_utf8() '। – Shepmaster
मैं कोड गोल्फ में चाहता हूं: 's.chars()। Skip_while (| i | i! = '$')। छोड़ें (1) .next()। Is_some()' किसी भी इंडेक्स कंप्यूटेशंस इमो से कहीं अधिक स्पष्ट है –