if let文について。
端的にいうと、
fn main() { let mytuple=(3,4,5); // (3,4,何でもいい) というタプルと (3,4,5) というタプルはマッチするので // if節が実行される if let (3,4,_) = mytuple{ println!("mached "); } // (3 ,second, 何でもいい) というタプルと、(3,4,5)はマッチするので // secondが定義されて、mytuple.1 が代入される if let (3,second,_) = mytuple{ println!("second element is {} ",second); } // (4,second,何でもいい) というタプルは、(3,4,5)とマッチしないので、 // else 節へ行く if let (4,second,_) = mytuple{ println!("second element is {}",second); } else { println!("not matched"); } }
if let はパターンマッチで分岐するので、match文に近い。matchが複数のパターンと比較するが、比較の対象が一つだけの時は書きやすいようにif letが用意されている。
あと、if letには網羅性がない。matchは網羅性があるので、必要なパターンを陳列し終わったら、「そのほかのケース」として_ を用意し、match文に用意された選択肢のどれか一つに必ずマッチするように書かなければならないが、ifはそうではない。
fn main() { let mytuple=(3,4,5); // mytuple と (3,second,_) のマッチ match mytuple{ (3,second,_)=>println!("first = 3, second = {}",second), _ => (), } // mytuple と (3,second,_) のマッチ。 // 比較対象が一つだけならif letのほうが直観的 if let (3,second,_) = mytuple{ println!("first = 3, second = {}",second); } }