1

我想fmt!("%?", obj)在我的对象上调用一个方法来格式化结果。我尝试实现ToStrandRepr特征,但似乎都不起作用。这是我的测试代码:

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>

我正在使用 Rust 0.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 回答