tag:crieit.net,2005:https://crieit.net/tags/%E3%82%8F%E3%81%B3%E3%82%83%E3%81%82/feed 「わびゃあ」の記事 - Crieit Crieitでタグ「わびゃあ」に投稿された最近の記事 2020-02-02T22:40:09+09:00 https://crieit.net/tags/%E3%82%8F%E3%81%B3%E3%82%83%E3%81%82/feed tag:crieit.net,2005:PublicArticle/15704 2020-02-02T22:30:53+09:00 2020-02-02T22:40:09+09:00 https://crieit.net/posts/Rust-5e36cf0d1c2f9 Rustのコールバック関数を引数に取る書き方がむずかし うわびゃ☆(^~^)! <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 メモを書くのに便利な Crieit ……☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e36cc168660b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e36cc168660b.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 ブログ警察が ほぼ いないからな☆」</p> <pre><code class="JavaScript">(arg1, arg2) => { return 10; } </code></pre> <pre><code class="JavaScript">(arg1, arg2) => 10 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ JavaScript や C# って似てたっけ☆ 名無し関数 の文法を覚えるのが楽だよな☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 それに比べて Rust の名無し関数 の文法が魔界……☆」</p> <pre><code class="Rust">|arg1, art2| { 10 } </code></pre> <pre><code class="Rust">|arg1, art2| 10 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ まあ ここまでは 分かる☆」</p> <pre><code class="Rust">fn attack <F1> ( mut gets: F1 ) where F1 : FnMut(i8) { gets(10) } </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ 初見では さっぱり分からん☆ 少しずつ説明しよう☆」</p> <pre><code class="Rust">attack( |damage| println!("モンスターAは {} のダメージ。", damage) ); </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ なんか こんな感じに 名無しの関数を 関数に渡したいときは……☆」</p> <pre><code class="Rust">fn attack <F1> ( ~~~~ </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ まず F1 という名前を 関数名とコードブロックの間に書いて……☆」</p> <pre><code class="Rust">) where F1 : FnMut(i8) { </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ 引数リストのケツに……、 つまり 引数リストの前後に ごちゃごちゃ書くんだが、<br /> <code>where</code> の後ろには デリゲート を書いているのは 見れば分かると思う☆」</p> <pre><code class="Rust">( mut gets_damage: F1 ) </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ そして ようやく 引数に 名無し関数を受け取るパラメーターを書くことができる☆」</p> <pre><code class="Rust">gets_damage( 10 ); </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ 仮引数で受け取った関数は ふつうに使える☆<br /> この作れる関数が3種類ぐらいあって……☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 <code>Fn</code>, <code>FnMut</code>, <code>FnOnce</code> の3パターンがある☆ それぞれ イミュータブル、ミュータブル、クロージャのムーブと関係があるんだが……☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 もうやだ、寝る☆」</p> <pre><code class="Rust">|arg1| fire( 10 ) </code></pre> <pre><code class="Rust">|arg1| { fire( 10 ); } </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ↑ 思い出したんだが、無名関数が 返り値を返さないとき、 上記の <code>fire( 10 )</code> が都合の悪いことに 返り値 を返すと<br /> エラーになるんで、コードブロックで囲んでセミコロンを終わりに付ける必要がある☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 なんか かっこ悪いよな☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e36cbf85d3aa.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 Rust言語では 返り値を返さない関数は無くて、空のタプルを返すんだが、こまかいことはいいだろう☆」</p> <p><書きかけ></p> むずでょ