- 2022/8/27
- 演習問題の(3)で提示されているコードが間違っていたので修正
Rustaceanなら周知の事実であるが、Rustは基本式指向の言語である。そのため、すべてのブロックは式として扱われる。そしてとにかく型に厳しいことでも知られる(型に厳しいと言うよりは、少し特殊な場合を除いて部分型付けされていない、というだけのことなのだが)。
今回は、式において{ break v; }
や{ return v; }
の型はどういう型になるのかについて書いていきたい。
Rustaceanなら周知の事実であるが、Rustは基本式指向の言語である。そのため、すべてのブロックは式として扱われる。そしてとにかく型に厳しいことでも知られる(型に厳しいと言うよりは、少し特殊な場合を除いて部分型付けされていない、というだけのことなのだが)。
今回は、式において{ break v; }
や{ return v; }
の型はどういう型になるのかについて書いていきたい。
void
型とはほとんどの場合において「値がないこと」を示す特別な型である。このとき、関数の戻り値の型としてvoid
型を指定したときに「値を返さない」と説明する人をしばしば見かける。
これは解釈次第では間違いではないのだが、「誤解が生じやすい説明」であることを今回は書いていこうと思う。
これは「Rustのトレイトは『高カインド多相のない型クラス』である」のブコメに対する返信をする記事です。気になったコメントがあれば随時追加していきます。
opaupafz2.hatenablog.com
その記事は(ブログごと)消していてもうないのだが、実は筆者は過去、JavaScript(以下JSと呼ぶ)でCの共用体について説明しよう、という記事を書こうとしたことがある。しかし、複数の変数がメモリを共用する、というのをコーディングする際あまりメモリを気にする必要のないJSでは表現することは難しくそのときは「残念ながら表現することは不可能だ」という結論となっていた。そのため、配列などを利用すると似たようなことができる、程度のことしか書いていなかった。
しかし近年、JSの知識を深めていて「あ、それっぽいことは実現できそうだぞ」と思ったので、ここにその手法を記す。
続きを読むRustのトレイト(以降Rustトレイトとつなげて呼ぶことにする)は一体何なのか、様々な他言語の概念を通して調べていたが、やっと(「やはり」でもあるのだが)結論が出たので書いていこうと思う。
また、Rustトレイトはインターフェースなのか、MixInなのか、はたまたトレイトなのかということについて書き直したかったのでそれもついでに書く。