2016-08-18 84 views
4

有時我喜歡在函數中將相關變量分組,而不聲明新的結構類型。是否有可能在Rust中聲明本地匿名結構?

在C可以做到這一點,例如:

void my_function() {  
    struct { 
     int x, y; 
     size_t size; 
    } foo = {1, 1, 0}; 
    // .... 
} 

有沒有辦法在魯斯特做到這一點?如果不是,那麼最接近的等效物是什麼?

回答

8

雖然匿名結構不支持,你可以範圍至本地,做你的C版所描述的幾乎一模一樣:

fn main() { 

    struct Example<'a> { 
     name: &'a str 
    }; 

    let obj = Example { name: "Simon" }; 
    let obj2 = Example { name: "ideasman42" }; 

    println!("{}", obj.name); // Simon 
    println!("{}", obj2.name); // ideasman42 
} 

Playground link

另外一個選擇是一個元組:

fn main() { 

    let obj = (1, 0, 1); 

    println!("{}", obj.0); 
    println!("{}", obj.1); 
    println!("{}", obj.2); 
} 

Playground link

+0

感謝編輯@Shepmaster - 我真的應該提高我的答案的質量。 –

+0

哈哈,這個答案看起來很適合我!不知道你會缺少什麼質量;-) – Shepmaster