lazy_stati c глобальная строка не будет печататься - PullRequest
0 голосов
/ 09 февраля 2020

Я написал этот код, и у меня продолжают возникать проблемы ... Строка не будет печататься, и я не знаю, что я делаю здесь неправильно ...

use lazy_static::lazy_static;
use std::io::{self, Write};
use std::sync::Mutex;

lazy_static! {
    static ref example: Mutex<String> = Mutex::new("example string".to_string());
}

fn main(){
    println!("{}", example);
}

Я не знаю где я ошибся, я новичок во всей этой ржавчине, но я знаю, что мне нужно использовать глобальную изменяемую переменную здесь с lazy_stati c, поэтому мне нужно, чтобы это работало ...

1 Ответ

1 голос
/ 09 февраля 2020

example не является строкой. Это Mutex, содержащий String. Вы должны lock мьютекс перед доступом к его содержимому:

use lazy_static::lazy_static;
use std::io::{self, Write};
use std::sync::Mutex;

lazy_static! {
    static ref example: Mutex<String> = Mutex::new("example string".to_string());
}

fn main(){
    println!("{}", example.lock().expect("Could not lock mutes"));
}

Источник: цитирование https://doc.rust-lang.org/std/sync/struct.Mutex.html:

Каждый мьютекс имеет параметр типа который представляет данные, которые он защищает. Доступ к данным возможен только через ограждения RAII, возвращенные из lock и try_lock, что гарантирует доступ к данным только когда блокирован мьютекс.

...