Функция new класса OnceLock
Функция new класса OnceLock создаёт новый пустой экземпляр
OnceLock. Такой контейнер позволяет безопасно инициализировать
значение ровно один раз, даже при доступе из нескольких потоков.
Функция не принимает параметров и возвращает значение типа
OnceLock<T>, где T - тип хранимого значения.
Изначально контейнер пуст, и заполнить его можно с помощью методов
set или get_or_init.
Синтаксис
OnceLock::<T>::new()
Пример
Давайте создадим новый пустой контейнер OnceLock
для хранения целого числа:
use std::sync::OnceLock;
fn main()
{
let lock: OnceLock<i32> = OnceLock::new();
println!("{:?}", lock.get());
}
Результат выполнения кода:
None
Пример
Давайте создадим OnceLock и заполним его значением
с помощью метода set:
use std::sync::OnceLock;
fn main()
{
let lock: OnceLock<i32> = OnceLock::new();
let res = lock.set(12345);
println!("{:?}", res);
println!("{:?}", lock.get());
}
Результат выполнения кода:
Ok(())
Some(12345)
Пример
Давайте создадим OnceLock и инициализируем его строкой
через метод get_or_init:
use std::sync::OnceLock;
fn main()
{
let lock: OnceLock<String> = OnceLock::new();
let res = lock.get_or_init(|| String::from("abcde"));
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Смотрите также
-
класс
OnceLock,
который хранит значение, инициализируемое один раз -
метод
get,
который возвращает ссылку на хранимое значение -
метод
get_or_init,
который возвращает значение, инициализируя его при необходимости -
класс
Once,
который гарантирует однократное выполнение инициализации