Показать сообщение отдельно
  #55 (permalink)  
Старый 04.08.2015, 14:45
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Нeдавно использовал Cell<T>. Хотел внедрить счётчик в две фабрики, чтобы ограничить общее количество создаваемых ими экземпляров. Сначала пошёл на поводу у компилятора, который ругался, что счётчик неизменяемый. А сделаешь его изменяемым натыкаешься на ограничение но количеству изменяемых ссылок (допускается только одна). Получается, одна фабрика работает, а добавишь вторую - ошибка. Пытался обернуть структуру счётчика и в RefCell и в Cell. Не вышло по причине, что синтаксис становился каким-то сложным и нерабочим. Выход - применить Cell не ко всему счётчику, а только к одному меняющемуся полю. Появилось понятие "внутренняя изменяемость". Код демо-проекта есть на GitHub. Рекомендуют предпочесть Cell в противовес RefCell, так как RefCell приводит к выполнению дополнительных действий при исполнении программы и может вызвать панику.

https://doc.rust-lang.org/std/cell/

Последний раз редактировалось novikov, 04.08.2015 в 15:23.
Ответить с цитированием