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

Но возьмем ещё пример: ты хочешь вывести все элементы своего

контейнера с их порядковым номером. Как это сделать в крестах? Ну, либо заводить отдельный счетчик снаружи цикла, либо по старинке:

for(int k = 0; k < mycontainer.size(); ++k) { // ты же реализовал метод size(), да?
printf("%i: %s", k, mycontainer[k]); // ты же реализовал оператор [], да?
}

Как это сделать на расте?

for (k, elem) in mycontainer.iter().enumerate() {
println!("{}: {}", k, elem);
}


И заметьте, ничего дополнительного реализовывать на надо.

Правда, эти примеры опять не компиляются!
Ведь непонятно как наши хитрые элементы выводить. Ну, в крестах либо перегрузить оператор битового сдвига и использовать iostream, либо захламлять тело цикла, преобразуя содержимое в выводимые данные для printf. В расте - имплементировать трейт Display. В сложном случае он будет нетривиален, да, но эта сложность будет убрана из тела цикла и не видна (как и с iostream, но вы пробовали сложный вывод кучи данных через него делать? Нравится? printf, имхо, удобнее). А вот для несложных случаев, реализация Display для своего типа выглядит как:

#[derive(Display)]
struct MyContainer {}

Всё. Первая строчка.

Это вот то, что я оценил в первую очередь, ибо почему-то мне часто приходилось пару лет назад делать специфичные контейнеры и итераторы к ним...

Всё выше писал с телефона, возможны опечатки и нерабочий код.
Но главное, к чему я веду: в расте в большинстве случаев удобнее прятать сложность за высокоуровневой абстракцией, чем в крестах. А если у тебя уже есть опыт системных языков, то ты сможешь (вероятно) написать эти абстракции так, что это будет полный zero-cost.

4 ответов

23 просмотра

Ну тут спорно, если честно for (auto [i, value] : nonstd::enumerate(mycontainer)) { fmt::print("{}: {}\n", i, value); }

Пашечка- Автор вопроса
Sergey Skvortsov
Ну тут спорно, если честно for (auto [i, value] :...

Это в каком стандарте такое? Там же где и концепты?) в дикой природе - не видел. Но круто что движение в эту сторону есть

Дерайвится обычно всё-таки Debug, а не Display

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта