2013-05-25 2 views
1

Я хочу, чтобы fmt!("%?", obj) вызывал метод на моем объекте для форматирования результата. Я попытался реализовать черты ToStr и Repr, но ни один из них не работал. Вот мой тестовый код:ржавчина: определение ToStr для fmt

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.

ответ

2

%? является структурным форматированием, и это вряд ли изменится.

Единственный способ тока для печати ToStr представления на самом деле назвать to_str, например:

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

(Там в настоящее время неопределенные планы и некоторые сводные реализации для поддержки перегрузки спецификаторов форматирования (за %? исключением), но ничего в компиляторе пока нет.)

Смежные вопросы