172 похожих чатов

Привет, знаете ли вы ответ на следующий вопрос? Есть важная структура,

объявленная в одном крейте, но дополнительный функционал ей я добавляю в другом при помощи трейта(просто impl раст запрещает). — ну там сложный код с уймой зависимостей, который на том уровне не нужен. Так вот есть ли возможность указать приватность поля такую, что бы оно было приватным для прямого изменения, но могло бы быть изменено методами трейта: статическим и динамическим? Я только по-питоновски смог.

Off topic: Но вообще с этими приватными методами часто бывают проблемы, когда хочется добавить функционала, а не можешь, например, без наследования, и питоновский способ часто хорош.

6 ответов

6 просмотров

По идее, ты можешь поле сделать приватным, а геттер-сеттер вынести в еще один экстешн-трейт (но он уже будет объявлен рядом с типом). И потом заюзать этот экстеншн-трейт при реализации того главного.

Звучит как нехороший подход)

Anton-Trionprog Автор вопроса
Anton-Trionprog Автор вопроса
Αλεχ Zhukovsky
Звучит как нехороший подход)

а разве открывать для любого опасное поле, изменение которого разрушает целостность структуры, это нормально? =) При это мне надо, что бы в других крейтах можно было по-разному настроить структуру. Вот нужен как бы профи-левел, и им и является трейт, который мне предложил Миха Багишов. Припоминаю, я уже так некогда делал — трейт, который давал доступ к полям для тестирования.

Anton Trionprog
а разве открывать для любого опасное поле, изменен...

> Припоминаю, я уже так некогда делал — трейт, который давал доступ к полям для тестирования. Да я прекрасно знаю о чем речь - в дотнете есть атрибут InternalsVisibleTo который как раз это делает. Каждый раз когда вижу его использование вижу что кто-то просто таким образом закостылил Закрытое поле - норм, а вот "закрытое но если очень хочется то открытое" - не оч

Anton-Trionprog Автор вопроса
Αλεχ Zhukovsky
> Припоминаю, я уже так некогда делал — трейт, кот...

ну знаешь, это из области friend class и подобного. Но смотри: сама структура у меня в клейте common, она там толком тупо данные + пара методов. А вот уже другие крейты знают, как с ней работать. Одни крейты(X) её могут создавать, но другие не могут(Y), при этом создаётся она фабриками, которые юзают дофига типов и инфраструктуры того крейта(X) вообще. А другие(Y) её умеют читать и использовать, создавать не умеют и инфраструктуры крейта X не имеют т.к. X это вообще сервер. Так что пихать всё в один крейт как раз не красиво. Наоборот полагаю, что должно быть подобно лючку для техосмотра в реальной жизни. Домохозяка открыть его не может, а электрик откроет, прозвонит тестером, заменит что-то.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта