trait境界
genericな型に対して、traitで制限を設ける
hsの型クラス制約と同じmrsekut.icon
いくつかの書き方がある
インライン記法
上にも書いた「:」で指定するもの
code:rs
fn hoge<T: HogeTrait>(t: T) {
...
}
複数ある場合は+で繋ぐ
code:rs
fn top_ten<T: Debug + Hash + Eq>(values: &Vec<T>) {..}
where記法
whereを使う
冗長だがもっとも柔軟な書き方
trait自信がgenricsだと、これでしか書けない
code:rs
fn hoge<T>(t: T)
where
T: HogeTrait
{
...
}
impl Trait記法
implを使う
型パラメータを明示せずにかける
ただし、その本来の型パラメータなるものを使いまわしできない
引数、戻り値にそれを指定するとか
code:rs
fn hoge(t: impl HogeTrait){
...
}
他言語で似てる機能
あまり真面目に読んでないmrsekut.icon
「トレイト境界」という訳について
「トレイト制約」の方が良さげかも、という議論