Комментарии 4
Не могу не одобрять изучение раста, но все же не до конца понятно какую проблему это решает. Проперти в Java/C# решают проблему того, что кто-нибудь может что-нибудь не то случайно намутировать, потоу что там мутабельность — свойство типа, а не переменной. В расте соответственно такой проблемы нет.
Второй вопрос, который решают не сами проперти, а их использование в интерфейсах — гарантия, что некое поле существует. В расте это иногда нужно, но на практике достаточно обычно сделать трейт вида
pub trait EntityId {
fn id() -> Id;
}
Ну и утилити макрос чтоб в 1 строчку реализовывать его:
macro_rules! implement_entity_id {
($typ:ty) => {
impl EntityId for $typ {
fn id(&self) -> Id {
self.id
}
}
};
}
Статье все же не помешает тег «ненормальное программирование». Нормальным такой код на rust точно не назовешь.
Похоже, что используется композиция вместо наследования. Возможно механизм deref для поиска функций позволит реализовать схожий функционал без необходимости всех этих новых трейтов.
Я правильно понимаю что если нужно будет использовать self.access_count += 1; вместо self.access_count += 1; то придется изменять объявление трейта, а именно функцию get, которой придется возвращать Result ? при этом добавляя еще один дженерик для типа ошибки
Ржавое наследование 2. Славянский проброс Get/Set