Open20

the book読むぞ

ryooryoo

Rubyしか触れたことないから?列挙型って初めて
もしかしたらRubyにもあるかも

ryooryoo
enum IpAddrKind {
    V4,
    V6,
}

いまいち使い道が思い浮かばない

ryooryoo
enum IpAddr {
    V4(String),
    V6(String),
}

let home = IpAddr::V4(String::from("127.0.0.1"));

値も持てるのか

ryooryoo

enumの各列挙子にデータを直接添付できるので、余計な構造体を作る必要は全くありません。

ryooryoo

#![allow(unused_variables)]
fn main() {
enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}

let home = IpAddr::V4(127, 0, 0, 1);

let loopback = IpAddr::V6(String::from("::1"));
}
ryooryoo
let x: i8 = 5;
let y: Option<i8> = Some(5);

let sum = x + y;

これはエラー

ryooryoo

値がOption<T>以外の型であるとこ全てにおいて、値がnullでないと安全に想定することができます。 これは、Rustにとって、意図的な設計上の決定であり、nullの普遍性を制限し、Rustコードの安全性を向上させます。

ふむ

ryooryoo

matchのアームでNoneが考慮されてなかったらコンパイルエラーになる
徹底している

ryooryoo
let v = Some(3);
match v {
    Some(3) => println!("3!"),
    _ => (),
}

if let Some(3) = v {
    println!("3!");
}

同じ

ryooryoo

終わり
StructとEnumの使い分け例知りたいな

ryooryoo
enum Osaka {
    Fu,
    Shi,
}

こういうのもいけるのか