当前位置: 首页 > 知识库问答 >
问题:

正在尝试实现core::fmt::Show

戚俊健
2023-03-14

我正在尝试为我的二叉树实现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 具有不兼容的特征类型: 预期的枚举核心::fmt::FormatError, found

我不明白为什么。完整的代码可以在这里找到。欢迎对我的代码提出任何意见。

共有2个答案

慕容劲
2023-03-14

@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
}

这一切都是为了确保将错误消息转发给这个函数的调用者。

问题:

如果发生错误,该函数将以递归方式继续,如果弹出多个错误消息,则最后一个错误消息将覆盖较旧的错误消息。难道不是吗?

司徒高寒
2023-03-14

错误告诉您方法fmt没有它期望的类型,尤其是它发现了

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

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

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

 类似资料:
  • 问题内容: 我有两个要在Test Suite中一起运行的测试用例(两个不同的文件)。我可以仅通过“正常”运行python来运行测试,但是当我选择运行python单元测试时,它说运行0次测试。现在,我只是想至少进行一项测试以正确运行。 这是我的测试用例设置的示例 我该怎么做才能正确地完成这项工作? 问题答案: 您想使用测试服。因此,您无需调用unittest.main()。测试套件的使用应如下所示:

  • 对于我的项目,我需要在有Android Jelly bean的设备中实现HDR功能。从代码中我看到,当选择HDR(高动态范围)时,应用程序正在向HAL层发送SCENE\u MODE\u HDR。我是相机HAL层的开发者。当我得到scene mode=scene\u mode\u HDR时,我应该做什么。我是否需要请求驱动程序提供3幅具有不同曝光补偿值的图像,并且应用程序将负责拼接图像以生成HDR图

  • 为了更好地理解Promission在Javascript中的工作方式,我决定尝试一下,自己编写基本的实现代码。 基本上,我想实现以函数为参数的Promissions对象(我在代码中称之为Aaa)。此函数可以调用resolve来承诺,或者调用reject来它。基本实现和用法如下。不确定第二个论点是否可以接受,根据承诺规范,但这是我目前得到的。 所以现在可以创建、调用和解析承诺。每个方法都将返回新的A

  • 路径是正确的,所以我不知道是怎么回事。此外,如果我查看pdDocument.decrypt(String pw)方法,我会发现:这将解密一个文档。提供此方法仅出于兼容性原因。用户应该使用新的安全层,特别是openProtection方法。 这是什么意思?谁能给出一个如何用PDFBOX正确解密PDF文档的例子吗?

  • fmt

    import "fmt" mt包实现了类似C语言printf和scanf的格式化I/O。格式化动作('verb')源自C语言但更简单。 Printing &para verb: 通用: %v 值的默认格式表示 %+v 类似%v,但输出结构体时会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号 布尔值: %t 单词true或false 整数: %b 表示为二进制 %c