मैं एक while let
पाश जो Result
का एक इटरेटर के ऊपर जाता है और पैटर्न मिलान का उपयोग करता है; यह इटरेटर के ऊपर जाता है जब तक यह या तो एक Err
हिट या Ok
के मूल्य में रिक्त स्ट्रिंग है:क्या `while let` में पैटर्न मिलान करने वाले गार्ड का उपयोग करना संभव है?
while let Some(Ok(a)) = some_iterator.next() {
if a == "" {
break;
}
// ...
}
इस कोड को ठीक काम करता है। हालांकि, मुझे लगता है कि if
कथन बदसूरत दिखता है और शायद बेवकूफ जंग नहीं है। match
बयान में, गार्ड, पैटर्न मिलान में इस्तेमाल किया जा सकता है ताकि तरह:
match foo {
Some(Ok(a)) if a != "" => bar(a)
// ...
}
यह मेरा while let
पाश के लिए आदर्श होगा, हालांकि पैटर्न मिलान कार्यरत वहाँ यह समर्थन करने के लिए नहीं लगता है, एक सिंटैक्स त्रुटि के कारण:
while let Some(Ok(a)) = some_iterator.next() if a != "" { // <-- Syntax error
// ...
}
वहाँ एक while let
की हालत में इस तरह गार्ड का उपयोग करने का कोई तरीका है? यदि नहीं, तो क्या खाली स्ट्रिंग मिलने पर लूप से तोड़ने का एक बेहतर तरीका है?
* और शायद बेवकूफ जंग नहीं है * - एफडब्ल्यूआईडब्ल्यू, मैंने इस तरह कोड लिखा है; मेरे लिए बुरा नहीं लगता है। – Shepmaster
मैं उत्तरदाताओं को * प्राथमिक * प्रश्न ('चलो' जबकि गार्ड में जवाब देने पर ध्यान केंद्रित करने के लिए प्रोत्साहित करता हूं)। ओपी [शायद एक और सवाल पूछना चाहिए] (http://meta.stackexchange.com/q/39223/281829) "क्या कोई बेहतर तरीका है" पहलू के लिए। – Shepmaster