在Rust中,是否可以声明本地匿名结构体?

42
有时我喜欢在函数中将相关变量分组,而不声明新的结构类型。
在C语言中可以这样做,例如:
void my_function() {    
    struct {
        int x, y;
        size_t size;
    } foo = {1, 1, 0};
    // ....
}

在Rust中有没有一种方法可以做到这一点?如果没有,最接近的等效方式是什么?

1个回答

51

虽然不支持匿名结构体,但是你可以将它们本地作用域化,以几乎与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 链接

另一个选项是元组:

fn main() {

    let obj = (1, 0, 1);

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

Playground链接


11
我觉得这很奇怪。元组和数组都已经有了语法,为什么结构体没有?我感觉我应该可以这样做:let pos = { x: 10, y: 42 }。它基本上只是一个带有命名字段的元组。 - Brandon Dyer
1
@BrandonDyer Rust没有内置支持此语法,但是有一个可以实现它。 - Anderson Green

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接