Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

テストケース: 空の境界

境界の仕組みによる帰結として、trait が何の機能も 含んでいない場合でも、それを境界として使用できます。EqCopy は、std ライブラリに含まれるそのような trait の例です。

struct Cardinal;
struct BlueJay;
struct Turkey;

trait Red {}
trait Blue {}

impl Red for Cardinal {}
impl Blue for BlueJay {}

// これらの関数は、これらのトレイトを実装している型に対してのみ
// 有効です。トレイトが空であるという事実は関係ありません。
fn red<T: Red>(_: &T)   -> &'static str { "赤" }
fn blue<T: Blue>(_: &T) -> &'static str { "青" }

fn main() {
    let cardinal = Cardinal;
    let blue_jay = BlueJay;
    let _turkey   = Turkey;

    // 境界があるため、`red()` はアオカケスには機能せず、
    // その逆も同様です。
    println!("ショウジョウコウカンチョウは{}です", red(&cardinal));
    println!("アオカケスは{}です", blue(&blue_jay));
    //println!("七面鳥は{}です", red(&_turkey));
    // ^ TODO: この行のコメントを解除してみてください。
}

関連項目:

std::cmp::Eqstd::marker::Copy、および trait