2014-03-07 4 views
36

Ich nehme an, Sie so etwas tun:Wie implementiert man ein benutzerdefiniertes 'fmt :: Debug' Merkmal?

extern crate uuid; 

use uuid::Uuid; 
use std::fmt::Formatter; 
use std::fmt::Debug; 

#[derive(Debug)] 
struct BlahLF { 
    id: Uuid, 
} 

impl BlahLF { 
    fn new() -> BlahLF { 
     return BlahLF { id: Uuid::new_v4() }; 
    } 
} 

impl Debug for BlahLF { 
    fn fmt(&self, &mut f: Formatter) -> Result { 
     write!(f.buf, "Hi: {}", self.id); 
    } 
} 

... aber dieses Merkmal zu implementieren versucht erzeugt:

error[E0243]: wrong number of type arguments 
    --> src/main.rs:19:41 
    | 
19 |  fn fmt(&self, &mut f: Formatter) -> Result { 
    |           ^^^^^^ expected 2 type arguments, found 0 

jedoch, dass, wie andere Implementierungen es tun zu sein scheint. Was mache ich falsch?

Antwort

41

Gemäß dem Beispiel aus dem std::fmt docs:

extern crate uuid; 

use uuid::Uuid; 
use std::fmt; 

struct BlahLF { 
    id: Uuid, 
} 

impl fmt::Debug for BlahLF { 
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 
     write!(f, "Hi: {}", self.id) 
    } 
} 

Das Teil ist die fmt:: in fmt::Result zu betonen. Ohne dass Sie sich auf die Ebene Result beziehen. Die Ebene Result Typ hat zwei generische Typparameter, fmt::Result hat keine.

Verwandte Themen