{
db_pass: String,
db_name: String,
db: Option<db::DB>,
}
Чтобы исправить эту проблему нужно хранить не само значение DB, а ссылку на него? Я правильно понимаю?
Нет
странно, что db::DB::open принимает значения, а не ссылки
Я просто плохо умею со ссылками работать, а точнее с их временем жизни. Вот сам модуль db, уже изменённый для работы со ссылками: https://ibb.co/5K3rsKW
Имхо, на password лучше не держать ссылку, а хранить у себя
Меньше возни с лайфтаймами во всем остальном коде ценой одной аллокации (а может даже вообще бесплатно)
Это мой первый проект, хотелось бы как раз таки тут разобраться с лайфтаймами, ссылками. Пишу консольный менеджер паролей.
File::open принимает AsRef<Path>, ни к чему там клон тип &String нужен довольно редко, практически всегда достаточно &str я правильно понимаю, что name - это имя файла? тогда ему лучше дать тип не &String или &str, а &Path или AsRef<Path>
Изменил на &str где нуждно. Осталась последняя ошибка, но не могу понять с чем связана? https://ibb.co/yW3d7XJ
Хм, тут вроде надо &'a db_name UPD: таки &'a а не &'_
Где именно? В создании обьекта PManager?
в сигнатуре fn new
Первое время можно хранить просто по значению, а где требует именно ссылка, юзать Rc<RefCell>. Потом со временем можно и с ссылками и временем жизни освоится
Ну ошибка же явно пишет что хочет понять как долго живет DB. Надо просто поменять сигнатуру функции
Я поправил уже код, но теперь при возврате pm из new() ошибка used moved value pm.db
ты исправил ошибку с unwrap-ом, на которую я указывал?
Вот про это, кстати, забыл. Сейчас поправлю.
Обсуждают сегодня