试图实现core :: fmt :: Show

时间:2014-11-13 20:14:25

标签: rust traits

我正在尝试为我的二叉树实现core :: fmt :: Show。这是我的工具代码:

impl<T: PartialEq + PartialOrd + Show> Show for Node<T>
{
    fn fmt(&self, f: &mut Formatter) -> Result<(), &str>
    {
        match self.left {
            Some(ref x) => {x.fmt(f);},
            None => {}
        };
        match self.value {
            Some(ref x) => {
                write!(f, "{}", x.to_string().as_slice());
            },
            None => {}
        };
        match self.right {
            Some(ref x) => {x.fmt(f);},
            None => {}
        };
        Ok(())
    }
}

但是编译器抛出以下错误:

  

编译binary_tree v0.0.1(file:/// home / guillaume / projects / binary_tree)src / binary_tree.rs:60:2:   77:3错误:方法fmt具有特征的不兼容类型:预期   枚举core :: fmt :: FormatError,found&amp; -ptr [E0053] src / binary_tree.rs:60     fn fmt(&amp; self,f:&amp; mut Formatter) - &gt;结果&lt;(),&amp; str&gt;   src / binary_tree.rs:61 {src / binary_tree.rs:62匹配self.left {   src / binary_tree.rs:63 Some(ref x)=&gt; {x.fmt(F);},   src / binary_tree.rs:64无=&gt; {} src / binary_tree.rs:65};

我无法理解为什么。可以找到完整的代码here。欢迎任何关于我的代码的评论。

2 个答案:

答案 0 :(得分:4)

错误告诉你方法fmt没有它期望的类型,特别是它找到了一个&amp; -ptr(即&amp; str)应该有一个FormatError。 / p>

将方法签名更改为此将修复编译错误:

  fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::FormatError>

我已经在github上发送了一个拉取请求来进行此更改(并且还修复了您的测试,因此我可以验证它是否有效)

答案 1 :(得分:0)

@McPherrinM提出的答案是解决错误,但是rustc仍然会发出一些警告。这是用于删除警告的代码:

fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::FormatError>
{
    let mut result = Ok(());
    match self.left {
        Some(ref x) => {
            result = result.and(x.fmt(f));
        },
        None => {;}
    };
    match self.value {
        Some(ref x) => {
            result = result.and(write!(f, "{}", x.to_string().as_slice()));
        },
        None => {;}
    };
    match self.right {
        Some(ref x) => {
            result = result.and(x.fmt(f));
        },
        None => {;}
    };
    result
}

所有这些都是为了确保将错误消息转发给此函数的调用者。

问题:

如果发生错误,该函数将递归执行,如果弹出多个错误消息,则最后一个将覆盖旧的错误消息。不是吗?