LINUX.ORG.RU

История изменений

Исправление tailgunner, (текущая версия) :

Ты запиши сначала показанный код

Показанный код делает что-то сложное - мне тупо влом выяснять, что именно, и писать аналог. Цепочка вычислений будет выглядеть примерно так, как я показал, и ничем принципиальным от Си++ не отличается.

Еще лучше, что-нибудь арифметическое

fn main() {
    let s = String::from("123");
    let i = s.parse::<u32>()
             .and_then(|v| Ok(v+1))
             .and_then(|v| Ok(v*2))
             .and_then(|v| Ok(v*v))
             .unwrap();
    println!("{}", i);
}

А то в реально замороченном коде все эти ваши and_then превращаются в такие же простыни, как и if err в Go.

В такие же - не превращаются. Превращаются в одну длинную макаронину, но я полагаю, с этим можно бороться путем перегрузки операторов.

Исправление tailgunner, :

Ты запиши сначала показанный код

Показанный код делает что-то сложное - мне тупо влом выяснять, что именно, и писать аналог. Цепочка вычислений будет выглядеть примерно так, как я показал, и ничем принципиальным от Си++ не отличается.

Еще лучше, что-нибудь арифметическое

fn main() {
    let s = String::from("123");
    let i = s.parse::<u32>()
             .and_then(|v| Ok(v+1))
             .and_then(|v| Ok(v*2))
             .and_then(|v| Ok(v*v))
             .unwrap();
    println!("{}", i);
}

Исходная версия tailgunner, :

Ты запиши сначала показанный код

Показанный код делает что-то сложное - мне тупо влом выяснять, что именно, и писать аналог. Цепочка вычислений будет выглядеть примерно так, как я показал и ничем принципиальным от Си++ не отличается.

Еще лучше, что-нибудь арифметическое

fn main() {
    let s = String::from("123");
    let i = s.parse::<u32>()
             .and_then(|v| Ok(v+1))
             .and_then(|v| Ok(v*2))
             .and_then(|v| Ok(v*v))
             .unwrap();
    println!("{}", i);
}