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

时间:2014-10-24 14:02:16

标签: 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 {
        //...
    }
}

3 个答案:

答案 0 :(得分:14)

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

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

impl MyStruct {
    const MY_STATIC: i32 = 123;
}

fn main() {
    println!("MyStruct::MY_STATIC = {}", MyStruct::MY_STATIC);
}

答案 1 :(得分:10)

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 {
        //...    
    }
}

答案 2 :(得分:6)

您不能在结构中声明字段静态。

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

static FOO: int = 42;

如果没有不安全的代码,你就不能拥有一个静态变量:要遵循借用规则,它必须包装在一个容器中,使得运行时借用检查并Sync,如Mutex或{ {1}},但这些不能存储在静态变量中,因为它们具有非平凡的构造函数。