Rustのコールバック関数を引数に取る書き方がむずかし うわびゃ☆(^~^)!

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 メモを書くのに便利な Crieit ……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ブログ警察が ほぼ いないからな☆」

(arg1, arg2) => {
    return 10;
}
(arg1, arg2) => 10

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ JavaScript や C# って似てたっけ☆ 名無し関数 の文法を覚えるのが楽だよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それに比べて Rust の名無し関数 の文法が魔界……☆」

|arg1, art2| {
    10
}
|arg1, art2| 10

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まあ ここまでは 分かる☆」

fn attack <F1> (
    mut gets: F1
) where
    F1 : FnMut(i8)
{
    gets(10)
}

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 初見では さっぱり分からん☆ 少しずつ説明しよう☆」

attack( |damage| println!("モンスターAは {} のダメージ。", damage) );

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんか こんな感じに 名無しの関数を 関数に渡したいときは……☆」

fn attack <F1> (
          ~~~~

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まず F1 という名前を 関数名とコードブロックの間に書いて……☆」

) where
    F1 : FnMut(i8)
{

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 引数リストのケツに……、 つまり 引数リストの前後に ごちゃごちゃ書くんだが、
where の後ろには デリゲート を書いているのは 見れば分かると思う☆」

(
    mut gets_damage: F1
)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そして ようやく 引数に 名無し関数を受け取るパラメーターを書くことができる☆」

gets_damage( 10 );

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 仮引数で受け取った関数は ふつうに使える☆
この作れる関数が3種類ぐらいあって……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Fn, FnMut, FnOnce の3パターンがある☆ それぞれ イミュータブル、ミュータブル、クロージャのムーブと関係があるんだが……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もうやだ、寝る☆」

|arg1| fire( 10 )
|arg1| { fire( 10 ); }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 思い出したんだが、無名関数が 返り値を返さないとき、 上記の fire( 10 ) が都合の悪いことに 返り値 を返すと
エラーになるんで、コードブロックで囲んでセミコロンを終わりに付ける必要がある☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんか かっこ悪いよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Rust言語では 返り値を返さない関数は無くて、空のタプルを返すんだが、こまかいことはいいだろう☆」

<書きかけ>

ツイッターでシェア
みんなに共有、忘れないようにメモ

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!
ボードとは?

コメント