https://kudohamu.hatenablog.com/entry/2015/09/26/084621
で、以下のようなコードが出てきて、なぜhoge()()と()が二重になるのかなと思いましたが、
fn main(){
println!("{}", hoge()());
}
fn hoge() -> Box<dyn Fn() -> String> {
Box::new(|| -> String {
String::from("ほげー!")
})
}
Geminiで質問すると、
hoge()だけだと関数呼び出すだけで、hoge()()としないと戻り値であるクロージャーの実行はできないと以下のように言われました。
『まとめ:
hoge()()
は、hoge
関数を呼び出し、その結果として得られたクロージャを呼び出すという二つの操作をまとめて実行しています。』
「関数の戻り値としてのクロージャーを実行するなら二重括弧を使う」ということのようです
したがって、以下のように冗長に記述もできます。
let abc = hoge();
println!("{}", abc());
同じことは、クロージャーを戻り値にしている
https://isehara-3lv.sakura.ne.jp/blog/2024/04/05/クロージャーを戻り値にするrust/
のコードでも言えて、
let fn_plain = create_fn(); // return a closure
fn_plain();
と
create_fn()();
は等価です
admin