(arg1, arg2) => {
return 10;
}
(arg1, arg2) => 10
「 ↑ JavaScript や C# って似てたっけ☆ 名無し関数 の文法を覚えるのが楽だよな☆」
「 それに比べて Rust の名無し関数 の文法が魔界……☆」
|arg1, art2| {
10
}
|arg1, art2| 10
fn attack <F1> (
mut gets: F1
) where
F1 : FnMut(i8)
{
gets(10)
}
「 ↑ 初見では さっぱり分からん☆ 少しずつ説明しよう☆」
attack( |damage| println!("モンスターAは {} のダメージ。", damage) );
「 ↑ なんか こんな感じに 名無しの関数を 関数に渡したいときは……☆」
fn attack <F1> (
~~~~
「 ↑ まず F1 という名前を 関数名とコードブロックの間に書いて……☆」
) where
F1 : FnMut(i8)
{
「 ↑ 引数リストのケツに……、 つまり 引数リストの前後に ごちゃごちゃ書くんだが、
where
の後ろには デリゲート を書いているのは 見れば分かると思う☆」
(
mut gets_damage: F1
)
「 ↑ そして ようやく 引数に 名無し関数を受け取るパラメーターを書くことができる☆」
gets_damage( 10 );
「 ↑ 仮引数で受け取った関数は ふつうに使える☆
この作れる関数が3種類ぐらいあって……☆」
「 Fn
, FnMut
, FnOnce
の3パターンがある☆ それぞれ イミュータブル、ミュータブル、クロージャのムーブと関係があるんだが……☆」
|arg1| fire( 10 )
|arg1| { fire( 10 ); }
「 ↑ 思い出したんだが、無名関数が 返り値を返さないとき、 上記の fire( 10 )
が都合の悪いことに 返り値 を返すと
エラーになるんで、コードブロックで囲んでセミコロンを終わりに付ける必要がある☆」
「 Rust言語では 返り値を返さない関数は無くて、空のタプルを返すんだが、こまかいことはいいだろう☆」
<書きかけ>
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント