rust - 用自己的字符串实现错误描述

标签 rust lifetime

我想实现一个使用错误参数之一的错误描述,但我找不到返回不会消失的描述的方法。

#[derive(Debug, PartialEq)]
pub struct MissingParamError {
    name: Box<String>
}

impl Error for MissingParamError {
    fn description(&self) -> &str {
        &format!("Missing parameter {}", self.name)
    }
}

由于生成的描述超出范围,这当然会导致错误。

除了以下之外,是否有任何解决方法:

  • 添加MissingParamError::new这将预呈现完整的描述
  • 添加 Option<String>这将根据需要呈现描述并将其保存

最佳答案

没有;方法签名根本不允许您动态构造字符串。另外,因为它使用 &self ( 一个不可变指针),您不能使用第二个解决方法。

因为所有类型都实现了 Error还必须实现 Display (其全部目的是格式化一个值以显示给用户), 将是生成重要消息的合适位置。

或者按照您的建议,如果您觉得懒惰,请在 MissingParamError::new 中进行.


实际上,如果切换到 RefCell<Option<String>>,您可以使用第二种解决方法为了获得内部可变性,但这有点矫枉过正。

实际上,你不能,因为你无法从 RefCell 中获得长期的借用。 (谢谢,@bluss)。

关于rust - 用自己的字符串实现错误描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30421603/

相关文章:

hashmap - 为什么 csv::Reader 记录中的字符串在插入到 HashMap 中时生命周期不够长?

循环中的 Rust 生命周期问题

rust - 如何在 WebAssembly 中从 Rust 返回一个字符串(或类似字符串)?

rust - 通过 HashMap::Entry 进行模式匹配时出现 "ambiguous associated type"错误(错误代码 E0223)

rust - 无法推断包含对闭包的引用的结构的生命周期

closures - 将 &mut 传递给函数并返回闭包的生命周期问题

image - Rust + Rust 图像 - 私有(private) 'Associated Type' ?

c - 是否可以在未安装 TOR 的情况下连接到 TOR?

javascript - 为什么尝试访问 React 组件的类名会导致 ReferenceError ?

reference - 生命周期和对包含引用的对象的引用