2014-10-24 4 views
6

Как объявить «статические» поля в структуре в Русте, предпочтительно со значением по умолчанию:Статические поля в структуре в Rust

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

    //using 
    let a = get_value() 
    if a == MyStruct::my_static { ... } else {...} 
+0

с помощью 'static' ключевое слово не работает? – CinCout

+1

как это уместно? – CinCout

ответ

5

Ржавчина не поддерживает статическое поле в структурах, так что вы можете Не делай этого. Самое близкое, что вы можете получить, это статические методы:

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

if a == MyStruct::my_static() { ... } else { ... } 
+0

У вас есть идея, почему бы и нет? –

+0

@AlexanderSupertramp, возможно потому, что они действительно не нужны? Статические поля могут использоваться только для определения области охвата и инкапсуляции, но блок инкапсуляции в Rust является модулем, поэтому просто создайте 'static' в модуле, в котором находится ваша структура, вот и все. –

3

Вы не можете объявить поле статическим в структуре.

Вы можете объявить статическую переменную в области видимости модуля, как это:

static FOO: int = 42; 

И вы не можете иметь статическую переменную изменяемые без опасного кода: следовать правилам заимствования она должна была бы быть обернуты в контейнере делая проверки заработка во время выполнения и являющимися Sync, например Mutex или RWLock, но они не могут быть сохранены в статической переменной, поскольку у них есть нетривиальные конструкторы.

-1

Вы можете объявить константу, связанную в осущ:

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

impl MyStruct { 
    const MY_STATIC: i32 = 123; 
} 

fn main() { 
    println!("MuStruct::MY_STATIC = {}", MuStruct::MY_STATIC); 
} 
+0

'static' и' const' - [разные вещи в Rust] (https://doc.rust-lang.org/book/first-edition/const-and-static.html). – Shepmaster

+0

@ Shepmaster, я знаю. Я думаю, что автор вопроса имел в виду не статический, который находится в Rust, а член структуры, которая не хранится в объекте структуры –

Смежные вопросы