目次

Rustの勉強[高度な型 その3]

ぎじゅつ

はじめに

#

NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版

を読んでいる

  • スト6をやるために広島に向かっている
  • 新幹線でRust

お勉強

#
  • 引き続きこれをやっている

NO IMAGE高度な型 - The Rust Programming Language 日本語版

メモ

#
  • !の取り合つかいが全く頭に入ってこなかった
let guess: u32 = match guess.trim().parse() {
    Ok(num) => num,
    Err(_) => continue,
};
  • guess.trim().parse()Resultで帰ってくるってことでしょ?
  • letだから型はコンパイル時に確定しなきゃいけないくて、numの型が帰ってくるようにするとErr!型で帰ってくる
  • この型がどの型にも適応できるnever型という理解
  • 良さそうな理解な気がする
impl<T> Option<T> {
    pub fn unwrap(self) -> T {
        match self {
            Some(val) => val,
            None => panic!("called `Option::unwrap()` on a `None` value"),
        }
    }
}
  • unwrapのコードらしい

panic!の型は!なので、match式全体の結果はTと確認します。

  • なるほど
  • Tvalの型であって、panic!の戻り値は!
  • よってvalの型、すなわちTにも適応できるということ
    • たぶんね

valの型はTで、 panic!の型は!なので、match式全体の結果はTと確認します。

  • 先走って書いたらあったわここに

コンパイラが特定の型の値1つにどれくらいのスペースのメモリを確保するのかなどの特定の詳細を知る必要があるために、 Rustの型システムには混乱を招きやすい細かな仕様があります: 動的サイズ決定型の概念です。

時としてDSTやサイズなし型とも称され、これらの型により、実行時にしかサイズを知ることのできない値を使用するコードを書かせてくれます。

  • おお、ここおもろそうだな

そうです。&strではなく、strは単独でDSTなのです。

  • DST is NANI?
  • Dynamically Sized Typesっぽい
  • ああ、普通に動的サイズというのを英語にしただけっぽいな

まとめ

#
  • neverが分かって結構スッキリした
  • 応用編だからちょっとカロリーが高いな
  • 次ここ

NO IMAGE高度な型 - The Rust Programming Language 日本語版