Обычный макрос assert_eq!
требует, чтобы PartialEq был реализован в структуре — у меня есть вектор трейт-объектов, Vec<Box<dyn Element>>
, где Element — это трейт, требующий отладки, pub trait Element: std::fmt::Debug
. Точно так же я не могу требовать PartialEq
, так как он требует Self в качестве параметра типа, который компилятор не может преобразовать в трейт-объект.
Решения, которые я видел, включают в себя требование функции, связанной с eq, в определении черты, что мне не нравится, поскольку это просто отладочный код, и я не думаю, что было бы выгодно включать метод, который был бы бесполезным. и потенциально сбивающее с толку дополнение к API трейта за пределами сборки cargo test
.
Есть ли другой (потенциально небезопасный) способ сравнить два типаж-объекта?
MyElement
сYourElement
-- если сравнения выходовDebug
достаточно, это нормально, но в большинстве случаев, когда сравнение значений разных типов имеет смысл, вам понадобится что-то более похожее на то, что найдено в связанном вопросе. - person trentcl   schedule 20.03.2021