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

时间:2015-05-24 08:41:34

标签: 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>,可以根据需要呈现描述并保持不变

1 个答案:

答案 0 :(得分:8)

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

由于实现Error的所有类型必须实现Display(其目的是格式化值以便向用户显示), 将是生成非平凡消息的合适位置。

或者如您所说,如果您感到懒惰,请在MissingParamError::new中进行。

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

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