2014-05-02 24 views
6

से वापसी मूल्य के रूप में लक्षण मेरे पास दो enums, NormalColour और BoldColour हैं, जिनमें से दोनों Colour विशेषता को लागू करते हैं। उनमें Blue, BoldGreen, और इसी तरह शामिल हैं।फ़ंक्शन

मैं परिणाम पर paint फ़ंक्शन कॉल,, एक ही समारोह से इन प्रकार के दोनों के मूल्यों वापस जाने के लिए उन्हें इलाज के रूप में यद्यपि वे सिर्फ एक Colour मूल्य रहे हैं चाहते हैं, लेकिन मैं के लिए एक रास्ता नहीं मिल रहा है मेरे लिए ऐसा करने में जंग को मजबूर करना।

pub trait Colour { 
    fn paint(&self, input: &str) -> String; 
} 

fn file_colour(stat: &io::FileStat) -> Colour { 
    if stat.kind == io::TypeDirectory { 
     Blue 
    } else if stat.perm & io::UserExecute == io::UserExecute { 
     BoldGreen 
    } else { 
     White 
    } 
} 

किस प्रकार काम करने के लिए मैं समारोह वापसी करने की क्या ज़रूरत है: मैं कुछ इस तरह लिखने में सक्षम होना चाहते हैं?

मैं अंततः Colour लागू करने के लिए और अधिक प्रकार बनाना चाहता हूं, यही कारण है कि मुझे दो enums को एक बड़े enum में बदलने में कोई दिलचस्पी नहीं है।

उत्तर

5

उत्तर विशेषता वस्तुओं है। इसका मतलब है कि आप Box<Colour> के साथ अपने प्रकार के रूप में काम करेंगे; नंगे Colour एक तत्काल प्रकार नहीं है। as ऑपरेटर: Box::new(NormalColour::White) as Box<Colour> के साथ आप Box<T> ऑब्जेक्ट्स Box<Colour> पर जा सकते हैं। कई स्थानों पर यह आवश्यक नहीं है (बस Box::new(NormalColour::White) लिखें और इसे स्वचालित रूप से Box<Colour> पर ले जाया जा सकता है), लेकिन कभी-कभी यह अभी भी आवश्यक होगा।

फिर भी, यदि आप इसे एक enum के रूप में कर सकते हैं, तो यह शायद एक अच्छा समाधान होगा।

+1

हस्ताक्षर कैसा दिखता है? –

+0

@ जुआन इबीपीना: यह उस समय '~ रंग 'का रिटर्न प्रकार था; अब, यह 'बॉक्स ' है। तथ्य और तथ्य के रूप में, 'स्थिर' रंग शायद रंग भी काम करेगा। –

+0

@ChrisMorgan मेरे पास मेरे डिज़ाइन में ऑब्जेक्ट प्रकारों का एक सेट है जो एक सामान्य विशेषता के माध्यम से संबंधित हो सकता है, और एक enum लगभग त्रासदी होगी क्योंकि enum में लगभग 50-75 सदस्य होंगे। इसके अलावा मैं उस मामले के लिए एक विकल्प वापस करना चाहता हूं जहां रिमोट लड़के ने नाम गलत लिखा था। क्या आप कुछ सुझाव दे सकते हैं? –