Closed13

Rustlings: enum 編

tarotenetarotene

閑話休題

これ導入したらちょっと快適になった:

https://zenn.dev/yuucu/articles/vimrc-rust-yuucu

知り合いに VSCode を vim のキーバインドで使っている人はいるけど,自分は vim を vim-plug -> coc で VSCode っぽいスタイルに寄せる派だなぁ.

業務でコード書くときにもこれを導入したいくらい.

tarotenetarotene

Enum は Struct の双対みたいなものだと思っている(直積型に対する直和型のようなものなので).

tarotenetarotene

Rust では Struct に対して :: の記法を用いると impl で定義した関数を呼び出せるのに加えて,Enum に対しても :: で何かができるらしい.オタクを飽きさせない仕組みがすごい.

tarotenetarotene
error[E0599]: no variant or associated item named `Quit` found for enum `Message` in the current scope
  --> exercises/enums/enums1.rs:12:31
   |
7  | enum Message {
   | ------------ variant or associated item `Quit` not found here
...
12 |     println!("{:?}", Message::Quit);
   |                               ^^^^ variant or associated item not found in `Message`

error[E0599]: no variant or associated item named `Echo` found for enum `Message` in the current scope
  --> exercises/enums/enums1.rs:13:31
   |
7  | enum Message {
   | ------------ variant or associated item `Echo` not found here
...
13 |     println!("{:?}", Message::Echo);
   |                               ^^^^ variant or associated item not found in `Message`

error[E0599]: no variant or associated item named `Move` found for enum `Message` in the current scope
  --> exercises/enums/enums1.rs:14:31
   |
7  | enum Message {
   | ------------ variant or associated item `Move` not found here
...
14 |     println!("{:?}", Message::Move);
   |                               ^^^^ variant or associated item not found in `Message`

error[E0599]: no variant or associated item named `ChangeColor` found for enum `Message` in the current scope
  --> exercises/enums/enums1.rs:15:31
   |
7  | enum Message {
   | ------------ variant or associated item `ChangeColor` not found here
...
15 |     println!("{:?}", Message::ChangeColor);
   |                               ^^^^^^^^^^^ variant or associated item not found in `Message`

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0599`.

エラーメッセージをパッと読んだ限りだと,Message という Enum 型に対して

  • Quit
  • Echo
  • Move
  • ChangeColor

をそれぞれ実装することを求められているように見える.

tarotenetarotene

そういや Struct は完全にクラス扱いだったので :: 記法もインスタンス変数に対して呼び出せたけど,今回はクラスメソッド(の列挙体版)なので特にインスタンスらしきものはないと考えて良いのかな...?

tarotenetarotene

一旦,現時点での知識で太刀打ちできそうな箇所まで行く.

tarotenetarotene
enum Message {
    Quit,
    Echo,
    Move,
    ChangeColor,
}

みたいな書き方が許されるのはほとんど C と同じだな.

tarotenetarotene

enum 編あっさり終わった.フィーリング要素が強めになってきており若干不安.

このスクラップは2022/04/03にクローズされました