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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在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 {
        //...
    }
}
答案

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 {
        //...    
    }
}
另一答案

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

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

impl MyStruct {
    const MY_STATIC: i32 = 123;
}

fn main() {
    println!("MyStruct::MY_STATIC = {}", MyStruct::MY_STATIC);
}
另一答案

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

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

static FOO: int = 42;

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

以上是关于如何在Rust中的结构中声明“静态”字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Rust 中的结构数组中获取字段值数组?

在结构中声明 TcpStream 的 Rust 问题

静态库(.a)文件怎么拆分成(.o)文件

Rust 中的精确内存布局控制?

如何在Rust中的函数堆栈上放置C结构?

在静态构造函数中或外部声明静态字段之间的差异