объявленная в одном крейте, но дополнительный функционал ей я добавляю в другом при помощи трейта(просто impl раст запрещает). — ну там сложный код с уймой зависимостей, который на том уровне не нужен. Так вот есть ли возможность указать приватность поля такую, что бы оно было приватным для прямого изменения, но могло бы быть изменено методами трейта: статическим и динамическим? Я только по-питоновски смог.
Off topic: Но вообще с этими приватными методами часто бывают проблемы, когда хочется добавить функционала, а не можешь, например, без наследования, и питоновский способ часто хорош.
По идее, ты можешь поле сделать приватным, а геттер-сеттер вынести в еще один экстешн-трейт (но он уже будет объявлен рядом с типом). И потом заюзать этот экстеншн-трейт при реализации того главного.
Звучит как нехороший подход)
хм. спасибо за идею. Подумаю.
а разве открывать для любого опасное поле, изменение которого разрушает целостность структуры, это нормально? =) При это мне надо, что бы в других крейтах можно было по-разному настроить структуру. Вот нужен как бы профи-левел, и им и является трейт, который мне предложил Миха Багишов. Припоминаю, я уже так некогда делал — трейт, который давал доступ к полям для тестирования.
> Припоминаю, я уже так некогда делал — трейт, который давал доступ к полям для тестирования. Да я прекрасно знаю о чем речь - в дотнете есть атрибут InternalsVisibleTo который как раз это делает. Каждый раз когда вижу его использование вижу что кто-то просто таким образом закостылил Закрытое поле - норм, а вот "закрытое но если очень хочется то открытое" - не оч
ну знаешь, это из области friend class и подобного. Но смотри: сама структура у меня в клейте common, она там толком тупо данные + пара методов. А вот уже другие крейты знают, как с ней работать. Одни крейты(X) её могут создавать, но другие не могут(Y), при этом создаётся она фабриками, которые юзают дофига типов и инфраструктуры того крейта(X) вообще. А другие(Y) её умеют читать и использовать, создавать не умеют и инфраструктуры крейта X не имеют т.к. X это вообще сервер. Так что пихать всё в один крейт как раз не красиво. Наоборот полагаю, что должно быть подобно лючку для техосмотра в реальной жизни. Домохозяка открыть его не может, а электрик откроет, прозвонит тестером, заменит что-то.
Обсуждают сегодня