0

オブジェクトを構造体フィールドで比較する Ord のインスタンスを作成したいと考えています。多分私はここで何かを見逃しています

#[deriving(Eq, Clone)]
struct SortableLine<T>{
    comparablePart: ~T,
    line: ~str
}

impl Ord for SortableLine<~Ord>{
    fn lt(&self, other: &SortableLine<~Ord>) -> bool{
        return self.comparablePart.lt(&other.comparablePart);
    }
}

これは失敗します

オブジェクトを介して自己型を含む型のメソッドを呼び出すことはできません

フィールド比較の順序付けに基づいて親オブジェクトの順序付けを行う方法はありますか?

4

1 に答える 1

2

型パラメーターが問題です。特性オブジェクトを使用しようとしているのに、それが実際に得たものではない、または望んでいない場合。これを実装する方法は次のとおりです。ジェネリックを使用します。

#[deriving(Eq, Clone)]
struct SortableLine<T>{
    comparable_part: ~T,
    line: ~str
}

impl<T: Ord> Ord for SortableLine<T> {
    fn lt(&self, other: &SortableLine<T>) -> bool {
        return self.comparable_part < other.comparable_part;
    }
}

その他の 2 つの変更点に注意してください。

  1. a < bではなく使用しa.lt(&b)ました。実装ではそれほど重要ではありませんが、より単純だと思いますOrd
  2. 標準の Rust スタイルに合わせて (ああ、数か所の間隔) に変更comparablePartしました。comparable_part

SortableLineこの種のものには、 ;である必要がないという便利な副作用があります。それは単なる でありLine、注文可能な部品で作られている場合は注文可能であり、そうでない場合は注文可能ではありません.

于 2013-10-30T05:37:23.403 に答える