如何声明"静态" 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 {
//...
}
}
答案 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}},但这些不能存储在静态变量中,因为它们具有非平凡的构造函数。