処理長くなってちょっとまとめたいなって時にないですか?
でも関数起こすのめんどいなー。
変数受け渡し用の引数定義するのめんどうだし。。
そんなときに、関数の中で同じ処理まとめちゃう時に便利なのがクロージャー!
クロージャー:関数みたいに処理まとめられてその親スコープの変数も使えちゃうやーつ
※クロージャーってのは閉じたものみたいな意味で
関数の中に閉じ込められているからこんな名前になっていると思われる。
こんな感じで使います
(shori
関数の中で変数soto_hensu
を定義しといてクロージャーの中で呼び出す)
fn shori(){
let soto_hensu = "処理の外から来た変数だよ";
//これがクロージャー
let closure_dayo = |namae| {
println!("{}さんこんにちは",namae);
println!("{}",soto_hensu);
};
//実際クロージャーを使っているところ
closure_dayo("たろう");
closure_dayo("ほげた");
}
fn main() {
//メインで実行
shori();
}
実行結果
たろうさんこんにちは
処理の外から来た変数だよ
ほげたさんこんにちは
処理の外から来た変数だよ
クロージャーのフォーマット
|<引数1>,<引数2>|{<処理>}
みたいな感じで引数を|(パイプ)で囲んで渡します。
あとは普通の関数と変わらない。
関数と違って自分のスコープじゃない外の変数も使えるので
ちょっと使いたき時に便利ですね。