1

fmt!("%?", obj)オブジェクトのメソッドを呼び出して、結果をフォーマットしたいと考えています。ToStrReprトレイトを実装しようとしましたが、どちらもうまくいかないようでした。ここに私のテストコードがあります:

pub struct Element {
    name: ~str,
}

impl ToStr for Element {
    pub fn to_str(&self) -> ~str {
        fmt!("<%s>", self.name)
    }
}

fn main() {
    let e = Element{name: ~"root"};
    io::println(fmt!("e: %?", e));
}

それは印刷します:

e: {name: ~"root"}

私はそれが印刷されることを期待しています:

e: <root>

Rust0.6を使用しています。

4

1 に答える 1

2

%?は構造フォーマッタであり、これが変更される可能性はほとんどありません。

表現を印刷する現在の唯一の方法ToStrは、実際に を呼び出すことto_strです。たとえば、次のようになります。

fn main() {
    let e = Element{name: ~"root"};
    println(fmt!("e: %s", e.to_str()));
}

(現在、フォーマット指定子 (を除く%?) のオーバーロードをサポートするためのあいまいな計画といくつかの半分の実装がありますが、コンパイラにはまだ何もありません。)

于 2013-05-25T08:48:30.763 に答える