Хочу сделать трейт для разного количество пинов, и функцию для

получение массива состояний, размер которого равен количеству пинов.

Но такой код не компилируется.
trait Pins {
const COUNT: usize;
fn get_state(&self) -> [bool; Self::COUNT];
}

struct MyPins;
impl Pins for MyPins {
const COUNT: usize = 3;
fn get_state(&self) -> [bool; Self::COUNT] {
[false; Self::COUNT]
}
}

Требует ограничения: help: try adding a where bound using this expression: where [(); Self::COUNT]:
Но зачем? Такое ограничение требует если над размером массива производится суммирование или подобные операции

8 ответов

26 просмотров

Self::COUNT это константа а не тип, тут или const generic или добавить к константе ассоциированные тип. но const generics будет проще и чище

Алексей-Прищепочка Автор вопроса
Vitaly
Self::COUNT это константа а не тип, тут или const ...

Это ассоциативная константа, которая объявлена в трейте, в котором объялена ещё функция с возвратом массива. Добавил generic_const_exprs и в тех местах, где вызываю функцию Pins::get_state, пишу ограничение: [(); <H as Pins>::COUNT]:,

Так. Работать. Не. Будет. Юзай конст генерики trait Pins<COUNT: usize> { fn get_state(&self) -> [bool; COUNT]; }

Алексей-Прищепочка Автор вопроса

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

Алексей Прищепочка
Размер масива должен зависить от структуры для кот...

тогда тебе надо числа вытяшивать в типы, кодогенерация, макросы, страдания

Andrey Zgarbul
Так. Работать. Не. Будет. Юзай конст генерики tra...

А есть какая-то фундаментальная проблема с этим? Просто было бы логично, если бы можно было объявлять константы как дженериком, так и ассоциированной константой - то же, что и с типами

насколько я помню это пока не допили

Алексей-Прищепочка Автор вопроса
Boris Vinogradov
насколько я помню это пока не допили

Оно работает, просто нет нормальных bounds для констант.

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

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

опять пепяками меряетесь? пока нормально на js не попишете - у вас нет права голоса
Vitaly
14
Всем привет. Я что-то туплю. В эликсире есть config/runtime.exs чтобы грузить настройки времени выполнения. А в эрланге? Помню пару лет тому была дискуссия насчёт кошерности ...
Д. П.
5
Приветствую. А не подскажете какие ограничения есть на использования api метода setMyName ? Несколько раз сменил имя бота и получил бан на 2 месяца на смену имени.
Slick Slack
8
Всем привет. Сейчас я изучаю erlang по книге Erlang and OTP in action. Дошел до главы где реализуется первый gen server на примере tcp rpc сервера. Меня очень сильно смутил ко...
Freezing Death
11
Ребята, я 3 дня как вкатился в ардуино Думал на прогрессивном молодом языке Rust попилить что-нибудь А как-то грустно с библиотеками оказалось. Не подскажете почему так? Если...
AS Sarb
22
embassy это топ фреймворк для эмбеддед на данный момент?
AS Sarb
23
что за асемблер кста?
Shvabrikk Nya
19
Большинство людей тут наверное перешли с С? Как много вообще людей решило перейти на Rust и как много осталось?
AS Sarb
7
Почему rust не видит embassy_executor::main и только его? Код взял из экзампла
AS Sarb
5
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Карта сайта