Rustのif let some について(まとめ)。Rustのif let someがわからなかったので色々調べた。
まず、Rustは至る所でコードレベルのパターンマッチが可能。
次に、if letはmatch文のシンタクスシュガーである。
従って、if letは=前後の値のパターンマッチと同時に、変数定義もできる
それで、some はenum Optionの、C++のunionでいうところのメンバ名である
Rustのenumについて学んだ話(1) unionとしての使い方
Rustのenumについて学んだ話(4) Optionはenumで実装されている
従って、if let someは、
① if let 文でパターンマッチを行っている
② パターンマッチで、変数が、Option::Someのバリアントを持っているをチェック
③ パターンマッチの機能で、変数を定義
という視点で捉えられる。
マッチだが、retはOption型なので、これは定数Noneか、Some(値)のどちらかが入っている。if letで「retはSome(v)という形の値が入っているか」をチェックする。そしてもしマッチするなら、変数vを定義し、そこに値を入れる。これは正規表現で、パターンにマッチする文字列を取得するのに似ている。
if let Some は、ifの隣に変数定義に使うletが出てくる上に、未知の関数のように見えるSome()の中にそれまで定義されていなかった変数が突如出現するので、Rust初学者にとってはかなりわかりにくい文法だと思う。