Skip to content

Luhn

Luhn in Rust on Exercism

概要

  • whitespaceは無視する
  • 右から数えて偶数桁目を2倍にする
    • 2倍した数字が9より大きい場合は9を引く
  • その和が10で割り切れるかどうかを確認する

初期コード

pub fn is_valid(code: &str) -> bool {
todo!
}

考察

学んだこと

  • map_or

  • foldtry_foldの違いは?

    • fold は正常に処理が終わることを前提にしている
    • try_foldはエラーがある場合はそのエラーを返す
#[inline]
#[stable(feature = "iterator_try_fold", since = "1.27.0")]
#[rustc_do_not_const_check]
fn try_fold<B, F, R>(&mut self, init: B, mut f: F) -> R
where
Self: Sized,
F: FnMut(B, Self::Item) -> R,
R: Try<Output = B>,
{
let mut accum = init;
while let Some(x) = self.next() {
accum = f(accum, x)?;
}
try { accum }
}
  • Sized
    • これは、固定長を持つものである
  • FnMut はクロージャのトレイト
    • |hogehoge| はクロージャーの引数

参考記事