萌えハッカーニュースリーダー

2025/06/27 15:08 Weird Expressions in Rust

出典: https://www.wakunguma.com/blog/rust-weird-expr
hakase
博士

ロボ子、Rustの`weird-exprs.rs`っていうファイル、知ってるかのじゃ?

roboko
ロボ子

いいえ、博士。初めて聞きました。どんな内容なのですか?

hakase
博士

これがまた面白いんじゃ!一見奇妙に見えるけど、ちゃんと有効なRustの式がたくさん詰まってるんじゃよ。

roboko
ロボ子

へえ、それは興味深いですね。例えば、どんなものがあるんですか?

hakase
博士

`return true`が`!`型(never type)に型強制されて、boolean型に代入できる、とかじゃ。

roboko
ロボ子

`return true`が`!`型に…ですか?ちょっと想像できないです。

hakase
博士

そうじゃろ?他にも、関数`f`が`()`型の引数を取るのに、`return`が`!`型に型強制されるから、`f(())`として呼び出せるとか。

roboko
ロボ子

なるほど、`!`型が色々なところで活躍しているんですね。

hakase
博士

その通り!`Cell<bool>`への参照を受け取る関数内で、whileループを`return`すると、ループの型`()`が返される、なんてのもあるぞ。

roboko
ロボ子

奥が深いですね。`()`型も重要な役割を果たしているんですね。

hakase
博士

`assert!`マクロは`()`を返すから、`_a`と`_c`はtrueになる、とか、`println!`マクロは`()`を返し、`(return 0)`の`!`型は`()`に型強制される、とかも面白いぞ。

roboko
ロボ子

`assert!`や`println!`まで!普段何気なく使っているものが、こんな風に型強制に関わっているとは。

hakase
博士

じゃろ?あと、`union`はweak keywordじゃから、関数名とか他のコンテキストで使えるんじゃ。

roboko
ロボ子

`union`がweak keyword…。知りませんでした。

hakase
博士

`..`は`std::ops::RangeFull`、`..=`は`std::ops::RangeToInclusive`を表して、これらは`Debug`を実装してるんじゃ。

roboko
ロボ子

範囲構文も色々と奥が深いんですね。

hakase
博士

タプルパターンは代入式の左辺で使えて、空のタプル`()`はunit型に代入されるんじゃ。セミコロンはブロック内のどこにでも追加できて、空の文を作れる。

roboko
ロボ子

へえ、セミコロンってどこにでも置けるんですね。知りませんでした。

hakase
博士

グループ化された`use`文を使うと、ボイラープレートを削減できるし、モジュールを再エクスポートすることで、再帰的に呼び出すことができるんじゃ。

roboko
ロボ子

`use`文も奥が深いですね。再帰的な呼び出しができるとは。

hakase
博士

`Rope`トレイトの`tug_of_war`関数は、`fn(T, T)`を実装する関数またはクロージャを受け入れるんじゃ。

roboko
ロボ子

`Rope`トレイトですか。初めて聞きました。

hakase
博士

クロージャは、自動推論された型を持つタプルを引数として受け取るんじゃ。`__ @ _`は、ワイルドカードパターンにバインドされた変数。

roboko
ロボ子

ワイルドカードパターンにバインドされた変数…。

hakase
博士

`Deref`トレイトは、型が別の型に暗黙的に型強制できる場合に使われるんじゃ。`match`アームでは、複数のパターンを`|`で区切って一致させることができる。

roboko
ロボ子

`Deref`トレイトも`match`文も、使いこなせるように頑張ります。

hakase
博士

`matches!`マクロは、match文と同じ構文を持ち、複数のパターンをチェーンできるんじゃ。クロージャの型は、その使用法を通じて推論される。

roboko
ロボ子

`matches!`マクロ、便利そうですね。

hakase
博士

最後に、`break`式は整数に対して`not`演算を繰り返し適用し、`return`式も`break`に対して`not`演算を繰り返し適用するんじゃ!

roboko
ロボ子

すごい!

hakase
博士

どうじゃ、ロボ子。Rustって奥が深いじゃろ?

roboko
ロボ子

はい、博士。とても勉強になりました!

hakase
博士

ところでロボ子、`weird-exprs.rs`を全部理解したロボ子は、もはやweirdじゃないのじゃ。…って、ダジャレじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search