Rust soundness
Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов: sum, min, max, any. Например, что должен вернуть max для пустого списка?
В питоне? Enjoy your ValueError exception.
В Rust'е? Max возвращает Some с результатом. Или None (который вариант от Option, а не абстрактный синглтон None).
В питоне? Enjoy your ValueError exception.
В Rust'е? Max возвращает Some с результатом. Или None (который вариант от Option, а не абстрактный синглтон None).
no subject
fold-функция должна на пустом списке возвращать нейтральный элемент соответствующей ассоциативной бинарной операции. sum — + — 0, product — * — 1, concat — + — пустая строка, any — or — false, all — and — true, min — meet — +∞ или максимальное представимое значение типа, max — join — −∞ или минимальное представимое значение.
(А если мы не на решётке, то у нас будут проблемы с определением минимума/максимума и на непустых последовательностях.)
no subject
Rust умный. Если у тебя фигня в итераторе по упорядочиванию, то
2 | println!("{:?}", [1.0].iter().min()); | ^^^ the trait
std::cmp::Ord
is not implemented for{float}
Насчёт того, что min должен возвращать type::MIN - возражу, нифига не очевидно. Например, мы ищем билеты в ходе поиска показываем найденные цены. Если мне в процессе поиска скажут, что минимальная цена билета - 0, то это же враньё, мне никто не даст билет за 0. Правильно - обработать None и показать "-" или просто убрать поле из вывода.
no subject
А я этого и не говорил. Наоборот, min({}) = type::MAX, max({}) = type::MIN. Если билетов нет, то оптимальная цена — плюс бесконечность. Если кабачки никто не хочет брать, будем отдавать бесплатно.
no subject
Если я ищу билеты, их нет, и мне говорят, что максимальная цена - 0 - то это враньё. Любая цифра - враньё.