スポンサーリンク

Rustのif let Someについて調べた話。

Rustのif let some について(まとめ)。Rustのif let someがわからなかったので色々調べた。

まず、Rustは至る所でコードレベルのパターンマッチが可能。

Rustのパターンマッチングについて学んだ話


次に、if letはmatch文のシンタクスシュガーである。
従って、if letは=前後の値のパターンマッチと同時に、変数定義もできる

Rustのパターンマッチングについて学んだ話 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初学者にとってはかなりわかりにくい文法だと思う。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: