Open20
the book読むぞ
英語だめな子なのでthe bookの日本語訳版を読む
途中からだけど6. Enumとパターンマッチングから
Rubyしか触れたことないから?列挙型って初めて
もしかしたらRubyにもあるかも
enum IpAddrKind {
V4,
V6,
}
いまいち使い道が思い浮かばない
let four = IpAddrKind::V4;
enum IpAddr {
V4(String),
V6(String),
}
let home = IpAddr::V4(String::from("127.0.0.1"));
値も持てるのか
Structと何が違うかがわからん
enumの各列挙子にデータを直接添付できるので、余計な構造体を作る必要は全くありません。
?
#![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"));
}
確かに構造体にはできない
impl
でメソッド定義もできる
Option
きた
Rustにnullはない
let x: i8 = 5;
let y: Option<i8> = Some(5);
let sum = x + y;
これはエラー
値がOption<T>以外の型であるとこ全てにおいて、値がnullでないと安全に想定することができます。 これは、Rustにとって、意図的な設計上の決定であり、nullの普遍性を制限し、Rustコードの安全性を向上させます。
ふむ
match
のアームでNone
が考慮されてなかったらコンパイルエラーになる
徹底している
match
で書くほどでもない時のif let
let v = Some(3);
match v {
Some(3) => println!("3!"),
_ => (),
}
if let Some(3) = v {
println!("3!");
}
同じ
終わり
StructとEnumの使い分け例知りたいな
enum Osaka {
Fu,
Shi,
}
こういうのもいけるのか