Найти в Дзене
10 подписчиков

Страшно, вырубай.


Написал какую-то такую ерунду чтобы передать замыкание и чтобы в нём были доступны нужные данные положил там их рядышком, чтобы тот, кто вызывает эту функцию мне их передал сам, т.к. я не понял, как доказать расту, что я внутри замыкания ссылочки возьму и всё сойдётся, не будет никто его вызывать после момента как ссылка станет невалидной.

А потом понял, что с тем же успехом я могу создать структуру вроде:

pub struct DatabaseInner {
collections: Arc<std::sync::RwLock<HashMap<String, Collection>>>,
}

Накинуть ей реализации:

impl DatabaseInner {
pub fn get_reader_generation_id(
&self,
collection_id: &str,
reader_id: &str,
) -> Result<GenerationId, GetReaderGenerationIdFnError> {
let collections = self.collections.read().unwrap();
todo!();
Err(GetReaderGenerationIdFnError::NoSuchCollection)
}
}

А потом эту структурку передавать в дочерние элементы и не использовать замыкания в принципе (хотя по сути получилось оно же, но в явном виде, как и изначальный вариант).

Но с lifetime'ами ссылок нужно разобраться, может можно было и замыкание собрать.

#rust
Страшно, вырубай.  Написал какую-то такую ерунду чтобы передать замыкание и чтобы в нём были доступны нужные данные положил там их рядышком, чтобы тот, кто вызывает эту функцию мне их передал сам, т.к.
Около минуты