2016-08-18 50 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