rust: 縦棒2本はなんなの?
目次
最終更新日:2025/11/14
anyhow::Context の with_context() は .with_context(|| "abc") のように使うし、
.map() では .map(|i| i * 2) のように使う。
この縦棒2本は何なんだ。
縦棒の呼び名
C言語ではビット演算や論理演算で出てくるあれだが、そもそも呼び名を知らないことに気付いた。
vertical bar とか vertical line とからしい。
クロージャー
Rust の表にあった。
演算子としての意味だと C言語と同じだが、そうではない使い方をした場合はクロージャーになる。
無名関数などと一緒に説明があってどれがどれかよくわからなくなるあれだ。
縦棒は仮引数で、外側の値を内側に持ってくるときに「これらを使いますよー」という意味になる。
クロージャー自体は |仮引数...| {中身}
.with_context() は仮引数にしたいものがないけどクロージャーの書き方として || の部分が必要だからあるというだけだ。
仮引数が無い関数が my_func() となるのと同じことだ。
他の言語で |~| を使っているので採用されたそうだ。
仮引数が必要なことも
単にクロージャーを実装するだけでなく、こういうクロージャーがいるという指定がされる場合もある。
それでも引数にするものがないなら |_| などと書いてごまかすようだ。
writer: hiro99ma