Luhn
概要
- whitespaceは無視する
- 右から数えて偶数桁目を2倍にする
- 2倍した数字が9より大きい場合は9を引く
- その和が10で割り切れるかどうかを確認する
初期コード
pub fn is_valid(code: &str) -> bool { todo!}考察
学んだこと
-
map_or -
foldとtry_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| はクロージャーの引数