ты хочешь создать Then<Then<Then<Then<A, B>, C>, D>, G>, F>
Именно. Через then функции одноразово создается компаратор, который и будет сортировать.
как выглядит твой компаратор, который ты возвращаешь из Compare::compare()?
я до сих пор не понимаю что ты хочешь со своим кодом сделать, поэтому не могу нормальное решение посоветовать
Не понял вопроса. Я пока не приступал к реализации компараторов. Ведь на более высоком уровне абстракции застрял)
я правильно понял, что ты хочешь иметь некий векторов компараторов и сортировать другой вектор итемов согласно этому вектору компараторов?
растбук прочитал?
Да. Первый компаратор сортирует. Если он вернул Equal, то сортирует следующий в списке и т.д. Такое поведение и реализует then.
сколько планируется иметь компараторов?
Не всю. Мне теперь стыдно, хотя не уверен, что нашел бы там ответ на свой вопрос. "Как переходить от java мышления к rust".
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=de1df730da924bafcf76a5026060e5f9 обобщенный пример
решать задачи, читать код, писать код. всё как всегда. 🙂
первые 16 глав из 21 (кроме 10, 11, 14)
ох, а я думал глиста кинешь)
новичкам с джавы лучше глисты не показывать, хотя руки чесались конечно
я когда-то пришёл из питона и плюсов и решил написать generic для двоичного поиска кажись. ох как же мне было больно с типами. и компилятор-то был ещё со всем не тот что сейчас (со ссылками прям).
на будущее: крейты с последним апдейтом меньше чем год-два юзать с крайней осторожностью
Спасибо, должно работать. Но это решение сводится к отказу от удобства then. Ты по сути написал then сам. Если бы then был бы намного сложнее пришлось бы намного хуже. Оффтоп: Заинтриговали, что за глисты? xD
хочешь я тебе на then напишу
Окей, спасибо, учту
давай-ка напишу, а ты потом сравнишь, и скажешь, что больше понравилось
Если не затруднит
у тебя трейт Sortable супер странный. Это фабрика компараторов с каким-то входным значением для создания компаратора который сравнивает фабрики компараторов. в таком виде твой код просто не имеет смысла так что не буду then делать
Не делай, не хочу чтобы тратил свое время зря) Но код смысл имеет. Компараторы сравнивают не фабрики компаратов, а тех, кто реализует Sortable. То есть смысл в том, что структуры/енамы(как это одним словом назвать? класс?), реализующие Sortable, могут быть многоуровнево отсортированы с помощью списка SortType. И вот этот "класс", реализующий Sortable, должен уметь предоставлять компаратор для любого SortType. Это прикольно кстати, что в трейте можно прописать "статический метод", то есть не принимающий self. В джаве нельзя.
Ну вот для таких случаев в Расте действительно часто любят использовать те самые глисты. Это получается, по сути, interpretation pattern, где код, требующий список компараторов - это тот самый некий интерпретатор, а глист состоящий, собственно, из разных компараторов - это “инструкции” к интерпретации.
Да уж, придумал себе задачу параллельно читая растбук. Пришел неявно к глистам) Но и глисты не совсем подходят. По задумке размер списка инструкций неизвестен на этапе компиляции. То есть я хотел в рантайме через cli задавать по чем сортировать.
Здесь больше важен не размер списка, а то знаешь ты все типы компараторов сразу, или нет. Если да - то вместо Vec<Box<dyn Comparator>> можно юзать Vec<ComparatorsEnum>, где все их и перечислить.
Попробовать пописать на Scala
Обсуждают сегодня