ひどい一日だった。お酒に逃げた。
diary
想定通りに進まないことへのいらだちが感じられた。
また、ひどい虚無を覚えるときがあった。 そのため、早退した。
酒に逃げた。ワイン(カベルナ)とラム肉。 悪くはなかったがアルコール欲しさにワインを飲んでいるような感じがして、よいものではなかった。
葉巻を雑に吸う。 過っとが多少うまくなったような気がする。
今日の勉強
rust
TRPL pp.192-197
- ジェネリックな型を使うメソッド
impl<T> Name<T> {...}
- ジェネリックな型を使うのであれば、
impl
の直後に型引数T
を宣言しなければならない- ジェネリックな型であることがわかる
Name<T>
にメソッドを実装していることを指定するために、Tを使用することができる。impl Name<i32> {...}
などと特定の型だけの実装の場合を書くこともできる
- 構造体定義のジェネリックな型引数は、必ずしもその構造体のメソッドシグニチャで使用するものと同じにはならない
- 一部のジェネリックな引数はimplで宣言され、他の一部はメソッド定義で宣言される場合がある
- 2つの構造体では異なる型となりうるからbindを意識すれば問題ない
- コンパイル時にジェネリックなコードを具体的な型を持つコードに単層化する
- コンパイル時に、ジェネリックスをもったコードで使用された値を読み取り識別し、展開し、ジェネリックな定義を特定の定義と置き換える
- よって、実行時に、ジェネリックを使っているから遅くなる、ということはない
- トレイト
- 特定の型に存在し、他の型と共有できる昨日について、Rustコンパイラに伝える
- 共通の振る舞いを抽象的に定義できる
- トレイト境界
- これを使用すると、あるジェネリックが特定の振る舞いをもつ、あらゆる型になりうることを指定できる
- 型の振る舞い
- その型に対して呼び出せるメソッドから構成される
- 異なる型でも同じメソッドを呼び出せるなら同じ振る舞いを共有することになる
- トレイト定義は何の手段か
- メソッドシグニチャをあるグループにまとめ
- 何からの目的を達成するのに必要な一連の振る舞いを定義する
- トレイトの作り方
trait Trait名 {}
- traitブロックでトレイトを実装する型の振る舞いを記述する
- メソッドシグニチャを定義する
- メソッドシグニチャは
;
で終わらせられる。{}
で入れるはずの本体、このトレイトを保持する型がその実装を行うようにさせれる。