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>
むずでょ