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

ide*_*n42 9 struct rust

有时我喜欢在函数中对相关变量进行分组,而不是声明新的结构类型.

在C中,这可以完成,例如:

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

在Rust中有办法做到这一点吗?如果不是,最接近的等价物是什么?

Sim*_*ead 18

虽然不支持匿名结构,但您可以将它们放在本地范围内,几乎完全按照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
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接

另一个选项是元组:

fn main() {

    let obj = (1, 0, 1);

    println!("{}", obj.0);
    println!("{}", obj.1);
    println!("{}", obj.2);
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接

  • 我觉得这很奇怪。元组和数组都有语法,为什么结构体没有?我觉得我应该能够做到 `let pos = { x: 10, y: 42 }`。它基本上只是一个带有命名字段的元组。 (13认同)
  • @BrandonDyer Rust 没有对此语法的内置支持,但有一个[宏](https://crates.io/crates/structx/0.1.5) 可以实现它。 (2认同)