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
Около минуты
9 декабря 2022