Size: a a a

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

2021 June 17

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
let n = match n {
 Some(n) => n;
 None => return;
}
println!("{}", n);
источник

goldstein опять in Rust — русскоговорящее сообщество
постфиксные макросы решили бы эту проблему
источник

NE

Nyc Enas in Rust — русскоговорящее сообщество
это ранний выход а не обработка ошибок
источник

goldstein опять in Rust — русскоговорящее сообщество
n.unwrap_or_return!()
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
ну вот он хочет чтобы так раскрывалось. Но смотря на интерфейс Try трейта мне не оч. понятно как это сделать
источник

goldstein опять in Rust — русскоговорящее сообщество
можно было бы даже передавать значение в этот return
источник

goldstein опять in Rust — русскоговорящее сообщество
старого или нового?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
да и старого и нового. Там же подразумевается что ты работаешь в одной монаде . в опшне, а резалте или ещё где.

А тут у тебя взаимодействия опшна и юнита - двух разных типов
источник

NE

Nyc Enas in Rust — русскоговорящее сообщество
if let Some(n) = n { print_always(n) }
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
ну вот не хотят матчить, хотят коротко писать.

Но мне кажется это не супер идея
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
#[unstable(feature = "try_trait_v2", issue = "84277")]
impl<T> ops::TryV2 for Option<T> {
   type Output = T;
   type Residual = Option<convert::Infallible>;

   #[inline]
   fn from_output(output: Self::Output) -> Self {
       Some(output)
   }

   #[inline]
   fn branch(self) -> ControlFlow<Self::Residual, Self::Output> {
       match self {
           Some(v) => ControlFlow::Continue(v),
           None => ControlFlow::Break(None),
       }
   }
}

Кто
мне кстати объяснит почему тут Option<!> вместо ()? :)
источник

NE

Nyc Enas in Rust — русскоговорящее сообщество
я про то что зачем вызвать функцию с None если по условию это все равно что не вызвать
источник

AG

Andrei Grazhdankov in Rust — русскоговорящее сообщество
Всем привет! Jaeger-клиент норм у rust?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
let n = n?;
// .. 1000 строк кода
println!("{}", n);
источник

NE

Nyc Enas in Rust — русскоговорящее сообщество
это выглядит как будто ты передаешь в функцию булев флаг который говорит будет функция что-то делать или завершится сразу после запуска. Почему эту проверку не делает вызывающий код?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
потому что вызывающего кода может не быть. Например
fn foo() {
 let n = call_something_really_imporant()?;
 ... то же самое что раньше
}
источник

NE

Nyc Enas in Rust — русскоговорящее сообщество
тогда вернуть result, то же мне проблема
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
тут не нужен резалт. Опять же это может быть метод трейта Foo
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
не помните как либа называлась которая позволяла любые лайфтаймы трансмутить?*
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообщество
error[E0282]: type annotations needed
 --> src\main.rs:29:5
  |
29 |     handle_path(todo!(), |bar: Bar| "()");
  |     ^^^^^^^^^^^ cannot infer type for type parameter `T` declared on the function `handle_path`



error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
 --> src\main.rs:32:19
  |
32 |     handle_path::<Bar>(todo!(), |bar: Bar| "()");
  |                   ^^^ explicit generic argument not allowed


🤔
источник