Size: a a a

Rust — русскоговорящее сообществo

2020 October 31

Э

Эрик in Rust — русскоговорящее сообществo
А вообще, это в The Book надо читать.
источник

R

Rah in Rust — русскоговорящее сообществo
всем привет! хочу определить трейт для сервиса, но я заранее не знаю, будет ли он менять свое состояние.

если укажу в его методах &self, то будут проблемы с реализациями, которые захотят менять свое состояние

если укажу &mut self, то это может стать слишком большим ограничением для реализаций, которые не собираются менять свое состояние

так вот хочется оставить реализациям возможность выбрать, быть мутабельными или нет. чтобы было понятнее, вот первое, что пришло в голову, но выглядит слишком костыльно, есть варианты получше?
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
https://play.rust-lang.org/?mode=debug&edition=2018&gist=8634736f4eaa42a7861641a5462b3302 реализуй сразу для нужных ссылок
источник

R

Rah in Rust — русскоговорящее сообществo
о точно, спасибо!
источник

SS

Slava Sokolovsky in Rust — русскоговорящее сообществo
Как-то можно через знак вопроса развернуть ошибку и обернуть её затем в Some?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Slava Sokolovsky
Как-то можно через знак вопроса развернуть ошибку и обернуть её затем в Some?
.ok()
источник

Э

Эрик in Rust — русскоговорящее сообществo
Точнее, .err().
источник

SS

Slava Sokolovsky in Rust — русскоговорящее сообществo
Разве это не уплощение Result? Мне нужно, чтобы в случае Err вызывалось что-то типа return Some(Err(x))
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Slava Sokolovsky
Разве это не уплощение Result? Мне нужно, чтобы в случае Err вызывалось что-то типа return Some(Err(x))
Сделай свой трейт с методом, делов то
источник

SS

Slava Sokolovsky in Rust — русскоговорящее сообществo
Я сделал через match, но, конечно, хотелось бы чего-нибудь уже готового (если оно имеется)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Slava Sokolovsky
Разве это не уплощение Result? Мне нужно, чтобы в случае Err вызывалось что-то типа return Some(Err(x))
А, ну тогда .map_err(Some)?
источник

SS

Slava Sokolovsky in Rust — русскоговорящее сообществo
Эрик
А, ну тогда .map_err(Some)?
Хе-хе, тогда будет Result<T, Option<E>>, а нужно Option<Result<T, E>>
источник

Э

Эрик in Rust — русскоговорящее сообществo
Slava Sokolovsky
Хе-хе, тогда будет Result<T, Option<E>>, а нужно Option<Result<T, E>>
Просто в Some заверни тогда.
источник

SS

Slava Sokolovsky in Rust — русскоговорящее сообществo
источник

SS

Slava Sokolovsky in Rust — русскоговорящее сообществo
Сделал вот так
источник

D

Denis in Rust — русскоговорящее сообществo
Slava Sokolovsky
Хе-хе, тогда будет Result<T, Option<E>>, а нужно Option<Result<T, E>>
пиши всё в функцию f1(...), которая возвращает Result<Option<X>, E>, а потом сделай обёртку f2(...), которая бы делала f1(...).transpose()
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Slava Sokolovsky
Сделал вот так
Ну и отлично
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Нефиг комбинировать вот так императивный и декларативный стиль
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Кстати это решалось бы монадическим bind на раз два😁
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Но вообще возвращать Option<Result<>> нелогично и неинтуитивно.
источник