2017-06-25 9 views
5

उदाहरण के लिए:मैं परिणाम :: उपसर्ग के बिना सीधे ओके और एर का उपयोग क्यों कर सकता हूं?

enum Foobar { 
    Foo(i32), 
    Bar(i32), 
} 

fn main() { 
    let a: Result<i32, i32> = Result::Ok(1); 
    let b: Result<i32, i32> = Ok(1); 
    let c: Foobar = Foobar::Foo(1); 
    let d: Foobar = Foo(1); // Error! 
} 

मैं सिर्फ Foo() के बजाय Foobar::Foo() लिखने के लिए है, लेकिन मैं सिर्फ Result:: बिना Ok() लिख सकते हैं। ऐसा क्यों है? मेरे पास Some और None के लिए एक ही प्रश्न है।

उत्तर

9

use आइटम नामस्थान में enum वेरिएंट जोड़ सकता है, ताकि आपको enum के नाम से उन्हें उपसर्ग करने की आवश्यकता न हो।

use Foobar::*; 

enum Foobar { 
    Foo(i32), 
    Bar(i32) 
} 

fn main() { 
    let a: Result<i32, i32> = Result::Ok(1); 
    let b: Result<i32, i32> = Ok(1); 
    let c: Foobar = Foobar::Foo(1); 
    let d: Foobar = Foo(1); // Not an error anymore! 
} 

कारण है कि Ok, Err, Some और None योग्यता के बिना उपलब्ध हैं कि prelude कुछ use आइटम है कि (enums के लिए खुद को अतिरिक्त) प्रस्तावना को इन नामों को जोड़ने है:

pub use option::Option::{self, Some, None}; 
pub use result::Result::{self, Ok, Err}; 
संबंधित मुद्दे

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