如何在Rust中的结构中声明"静态"字段?

アレッ*_*ックス 20 rust

如何在Rust中的结构中声明"静态"字段,最好使用默认值:

struct MyStruct {
    x: i32,               // instance
    y: i32,               // instance
    my_static: i32 = 123, // static, how?
}

fn main() {
    let a = get_value();
    if a == MyStruct::my_static {
        //...
    } else {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

Rah*_*837 24

您可以在impl中声明关联的常量:

struct MyStruct {
    x: i32,
    y: i32,
}

impl MyStruct {
    const MY_STATIC: i32 = 123;
}

fn main() {
    println!("MyStruct::MY_STATIC = {}", MyStruct::MY_STATIC);
}
Run Code Online (Sandbox Code Playgroud)

  • `static`和`const`是[Rust中的其他内容](https://doc.rust-lang.org/book/first-edition/const-and-static.html)。 (2认同)
  • @ Shepmaster,我知道。我认为问题的作者想到的不是在Rust中的静态对象,而是不是存储在结构对象中的结构成员 (2认同)
  • https://doc.rust-lang.org/book/const-and-static.html,其中提供了Rust中有效的“其他功能”链接 (2认同)

Vla*_*eev 13

Rust不支持结构中的静态字段,因此您无法做到这一点.你能得到的最接近的是一个相关的方法:

struct MyStruct {
    x: i32,
    y: i32,
}

impl MyStruct {
    #[inline]
    pub fn my_static() -> i32 {
        123
    }
}

fn main() {
    let a = get_value();
    if a == MyStruct::my_static() {
        //...
    } else {
        //...    
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @AlexanderSupertramp,可能是因为他们不是真的需要?静态字段只能用于作用域和封装,但Rust中的封装单元是模块,所以只需在你的struct所在的模块中创建一个`static`,就是这样. (4认同)
  • 你知道为什么不吗? (3认同)

Lev*_*ans 7

您不能在结构中声明字段static.

您可以在模块范围内声明一个静态变量,如下所示:

static FOO: int = 42;
Run Code Online (Sandbox Code Playgroud)

如果没有不安全的代码,你就不能拥有一个静态变量:要遵循借用规则,它必须被包装在一个容器中,使得运行时借用检查和存在Sync,Mutex或者RWLock,但是这些不能存储在静态变量中,因为它们具有非安全性琐碎的建设者.