पर मिलान जंग जंग पैटर्न tutorial पैटर्न मिलान के कुछ बहुत ही बुनियादी उदाहरण दिखाता है, जैसे एक सी-शैली स्विच स्टेटमेंट अनुकरण करने के लिए एक पूर्णांक से मिलान करना। ट्यूटोरियल यह भी दिखाता है कि कैसे एक ट्यूपल प्रकार, और संरचनाओं को नष्ट करने पर बुनियादी विनाश करना है।एक वेक्टर
ऐसा लगता है कि एक वेक्टर पर पैटर्न मिलान करना संभव होना चाहिए, लेकिन मैं इसके लिए सही वाक्यविन्यास नहीं समझ सकता और मुझे इसका कोई उदाहरण नहीं मिला है।
उदाहरण के लिए, हास्केल में आप आसानी से एक सूची destructure कर सकते हैं:
fn foldr<A, B>(func: fn(A, B) -> B,
initValue: B,
vals: [A]) -> B {
alt vals {
[] { ret initValue; }
_ {
let h = vec::head(vals),
t = vec::tail(vals);
ret foldr(func, func(initValue, h), t);
}
}
}
नोट: करने के लिए सक्षम होने के लिए
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr func initValue [] = initValue
foldr func initValue (x:xs) = func initValue $ foldr initValue func xs
तो, एक किसी न किसी अनुवाद को देखते हुए, यह अच्छा होगा : मुझे पता है कि आप यहां एक कथन का उपयोग कर सकते हैं, मैं इसे एक वेक्टर पर मिलान पैटर्न के उदाहरण के रूप में उपयोग कर रहा हूं।
यह वर्तमान में प्रस्तुत करती है:
patterns.rs:10:4: 10:5 error: constant contains unimplemented expression type
patterns.rs:10 [] { ret initValue; }
^
error: aborting due to previous errors
वहाँ संरचनाओं destructuring के लिए ट्यूटोरियल में एक उदाहरण है ({ .. }
के साथ परिभाषित) और tuples ((..)
साथ परिभाषित), तो ऐसा लगता है जैसे वहाँ में निर्मित किया जाना चाहिए समर्थन वैक्टरों के साथ-साथ विचार करने के लिए उनमें एक विशेष वाक्यविन्यास भी शामिल है ([ .. ]
के साथ परिभाषित)।
अगर मैं गलत तरीके से वैक्टर का उपयोग कर रहा हूं तो मुझे सही करने के लिए स्वतंत्र महसूस करें।
कुछ हद तक स्पर्शपूर्ण, लेकिन पूंछ कॉल के लिए आपको "ret" के बजाय "होना" का उपयोग करना चाहिए। –
@ ian-b दिलचस्प, [ट्यूटोरियल] (http://doc.rust-lang.org/doc/tutorial.html) और [भाषा संदर्भ] (http://doc.rust-lang.org/doc/ rust.html) तब तक प्रतीत होता है, वे कीवर्ड के रूप में 'be' का उल्लेख करते हैं लेकिन वे – ash