Как можно разделить статическую переменную между функциями? - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь определить статическую переменную в функции f0 и повторно использовать ее в другой функции f1.

fn f0() {
    static v: i32 = 10;
}

fn f1() {
    static v: i32; // the compiler reports a syntax error for this statement
}

Однако, поскольку она не была назначена никакому значениюво второй функции компилятор сообщил об ошибке:

ожидается один из !, (, +, ::, < или =, найдено;

Я использую ночной набор инструментов Rust: rustc 1.40.0-nightly .

Это звучит немного странно, так как объявление статической переменной нене требует присваивания значений по натуре.

Что должно вызывать проблему?

1 Ответ

1 голос
/ 02 ноября 2019

Вы не можете объявлять статические переменные, которые не инициализированы, потому что компилятор Rust предполагает, что все переменные инициализированы.

Если вы действительно хотите это сделать, вы захотите использовать std::mem::MaybeUninit.

Однако, даже если вы это сделаете, это не решит вашу первоначальную проблему (разделение статической переменной между функциями). Каждая статика в вашем примере не зависит друг от друга.

Поэтому вам необходимо создать глобальную статическую переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...