Kerrigan
второй растобук хорош
Kerrigan
там нормально объяснили Rc/Arc
Αλεχ
клево
Αλεχ
а как ты сослался в markdown на строку в файле?
Αλεχ
я тоже так хочу
Αλεχ
Кстати чел дело говорит
Αλεχ
ты пробовал эту #[serde(with = "chrono_optimized_serde")]?
Αλεχ
по идее одну простую функцию реализовать надо
Andrei
Alexander
Небольшой срез по вчерашнему, может оно всем очевидно, но может быть кому-то и полезно будет: Оказывается у serde есть целый атрибут, который в документации говорится о том что он прямо специально для дат 'with'. Я завернул в него и всё стало хорошо.
Αλεχ
Alexander
Но , мне не очень понравилось что получается что у меня сейчас не вектор дат, а вектор моих обёрток, т.е. надо везде писать .0 для вынимания даты. Что вроде мелочь, а не приятно.
Αλεχ
каких оберток? Я думал у тебя структура с датой и еще чем-то
Alexander
Там есть ещё атрибут remote, который специально сделан чтобы обертки не было, но у меня опять же вектор - и хз как его наложить на вектор, тем более через soa-derive.
Alexander
Может быть можно переопределить сериализатор на вектор дат, но тоже как-то руками это писать не хочется. + Опять же структура генерится макросом.
Αλεχ
А тебя дефолтный сериализатор вектора не устраивает?
Alexander
Как раз устраивает.
Alexander
Но атрибут serde указывается на поле. В котором как раз вектор у меня.
Αλεχ
А, я тебя понял
Αλεχ
я б на твоем месте забил если честно
Αλεχ
700% это конечно звучит страшно, но на деле скорее всего копье
Αλεχ
хотя по фану можно и разобраться
Cuno
но... как же... перформанс?
Aleksey
Alexander
Evgεny
кажется, он что-то начинает подозревать
Αλεχ
Маjко
Маjко
Это в 1.25 ввели
Loo
Маjко
Просто для красоты? WTF
То есть это то, чем кажется?
Они добавили новую грамматику без семантики?
Cuno
Скорее всего как-то связано с матчами вида`Foo::A | Foo::B`
Маjко
Хз, такой синтаксис только путает.
Правило для A проваливается дальше, а для B и C нет, хотя везде знак или.
И чем плох
match x {
Foo::A
| Foo::B => println!("AB"),
Foo::C => println!("C"),
}
Маjко
Как же сука сложно в тг форматировать отступы
Cuno
https://github.com/mdinger/rfcs/blob/3b052a6311cc52d2767790576a8d8ebe443ccd53/text/0000-optional-match-vert.md
В F# так можно, давайте добавим в руст!
Filipp
https://github.com/rust-lang/rust/blob/master/RELEASES.md
Cuno
Filipp
Я нашел и сам себе ответил
Cuno
պլհկ
Cuno
Filipp
Я про это
А я коммент прочитал, увидел стоп-слово и дальше не читал
պլհկ
https://www.reddit.com/r/rust/comments/87zdq7/announcing_rust_125/dwgq9ry/
Αλεχ
Αλεχ
любой свитч начинается с палки, а не "А это первое у нас значение или не первое"
Αλεχ
очевидно же
Filipp
Посоны как Vec<Option<T>> в Option<Vec<T>> конвертнуть красиво?
Денис
очевидно, что в общем случае никак, потому что у тебя исходный Vec может содержать как Some, так и None
Evgεny
а че там fold
Filipp
правильный ответ
.collect
Filipp
https://play.rust-lang.org/?gist=d9dc4ff4df3a99262cfc43e5d01b0077&version=nightly
Денис
правильный ответ — в общем случае — никак
Filipp
в общем случае если в векторе есть None, то возвращается None, в остальных - Some(Vec<T>)
Денис
это не общий случай
Filipp
кажется вполне однозначная конверсия
Денис
описываемое тобой поведение — частный случай
Денис
если бы ты сказал "мне нужно, чтобы при наличии None весь вектор превращался в тыкву", то тогда вопросов бы не было
Cuno
Cuno
алсо, для такого flat_map есть
Денис
если бы написал into_iter, не пришлось бы звёздочку юзать)
Αλεχ
Danieλ
Если нужно вернуть none если хотя бы один элемент none, то см. хаскелёвый sequence
Денис
Денис
Денис
хз, мне не было
Денис
что конечно не делает мне чести
Αλεχ
fn vec_or_none<T>(input: Vec<Option<T>>) -> Option<Vec<T>> {
let len = input.len();
let result: Vec<_> = input.into_iter().filter_map(|x| x).collect();
if result.len() == len {
Some(result)
}
else {
None
}
}
fn main() {
println!("{:?}", vec_or_none(vec![Some(1), None, Some(2)]));
println!("{:?}", vec_or_none(vec![Some(1), Some(2)]));
}
Αλεχ
если кажется что неоптимально можно take_while сделать чтобы на первом None останавливаться
Αλεχ
но ваще неясно в чем проблема написать
Денис
ты чо
Денис
он же скинул уже решение
Денис
.collect()
Αλεχ
эм?
Денис
правильный ответ
.collect