【Rust】第2章第5回:クロージャ(Closure)の使い方と応用

本記事では、Rustのクロージャ(Closure)の基本的な使い方と応用について詳しく解説します。クロージャを活用することで、柔軟でコンパクトなコードを書くことが可能になります。
0. 記事の概要
この記事を読むメリット
- Rustのクロージャの基本を理解: 関数とクロージャの違いを学べます。
- 柔軟なコードを書く: クロージャを活用することで、より短く簡潔な処理を実装できます。
- Rustの所有権との関係を学ぶ: クロージャが変数をキャプチャする仕組みを理解できます。
この記事で学べること
- Rustのクロージャの基本構文
- クロージャのキャプチャと所有権
- クロージャを使った応用例
1. クロージャとは?

1.1 クロージャの基本構文
クロージャは、変数をキャプチャできる匿名関数です。
fn main() {
let add = |x, y| x + y;
println!("5 + 3 = {}", add(5, 3));
}
動作解説
このコードでは、|x, y| x + y
というクロージャを定義し、それを使って足し算を行っています。
2. クロージャのキャプチャ

2.1 変数をキャプチャするクロージャ
クロージャは、スコープ内の変数をキャプチャすることができます。
fn main() {
let num = 10;
let multiply = |x| x * num;
println!("3 × {} = {}", num, multiply(3));
}
動作解説
このクロージャは、スコープ内の変数num
をキャプチャし、掛け算を行います。
3. クロージャの所有権

3.1 moveを使った所有権の移動
クロージャが変数の所有権を取得するにはmove
を使用します。
fn main() {
let text = String::from("Hello");
let say_hello = move || println!("{}", text);
say_hello();
}
動作解説
move
を指定することで、変数text
の所有権がクロージャに移動します。
4. よくあるエラーと対処法
- 「borrowed value does not live long enough」エラー: クロージャのスコープ外で変数が参照される場合に発生。所有権を明示的に移動する。
- 「cannot borrow as mutable」エラー: 可変参照を使用する場合は、
move
や&mut
を適切に指定する。
5. まとめ
本記事では、Rustのクロージャの基本、変数のキャプチャ、所有権の移動について解説しました。次回は、Rustの所有権システムについて詳しく学びます。