目次

Rustの勉強[Derefトレイト その1]

ぎじゅつ

はじめに

#

NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読んでいる

お勉強

#

NO IMAGEDerefトレイトでスマートポインタを普通の参照のように扱う - The Rust Programming Language 日本語版
をやる

  • さすがに眠いが明日休みなのでありがたい
  • 今思ったけども自前実装の節は割とあるな
    • traitのおかげ

メモ

#

数値と数値への参照の比較は許されていません

  • 今見直したけどこれもあるのか

*yを使用して参照が指している値まで追いかけなければなりません(そのため参照外しです)

  • ここがどうしてもわからんな
  • あー*が参照外しなんだ
    • この記述やっていない気もするぞ
    • ムカつくねー
    • とりあえずつけると型によってmovecopyされるらしい
    • あー惑わされていた
  • 参照外しをしたときはエラーが起きずにyと比較したときにエラーが起きると記載されていた
    • 分かりづらすぎてムカつくな
fn main() {
    let x = 5;
    let y = Box::new(x);

    assert_eq!(5, x);
    assert_eq!(5, *y);
}
  • そうするとここでBoxいれる意味は?
    • 参照外しすればいいじゃん
    • そういうことでもないらしい
  • でもBoxでやりたいことって借用と一緒じゃないの?
    • 大枠の役割は似ているけど細かい部分が違うらしい
    • ちょっと抜かそう
    • あ、でも借用だとできない比較は*でできるのね

Derefトレイトがないと、コンパイラは&参照しか参照外しできません。

  • 参照も参照外しできたのか
    • まぁ参照だしそうか
    • Derefトレイトの話をしていて、実装すると*で一度だけ参照を外せるらしい
    • はずしたらなかの型がでてくる

まとめ

#
  • 大枠でやりたいことは借用と似ている
  • ヒープへ置くために入れることができる
  • Derefトレイトを実装すると参照外しできるようになる
  • それっぽく書いたけどわかんねー!
  • スマートポインタむず

次ここ
NO IMAGEDerefトレイトでスマートポインタを普通の参照のように扱う - The Rust Programming Language 日本語版