我想实现一个使用错误参数之一的错误说明,但我无法找到一种方法来返回一个不会消失的说明。
#[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>
,可以根据需要呈现描述并保持不变答案 0 :(得分:8)
没有;方法签名根本不允许您动态构造字符串。此外,因为它使用&self
(即不可变指针),所以不能使用第二种解决方法。
由于实现Error
的所有类型必须也实现Display
(其目的是格式化值以便向用户显示), 将是生成非平凡消息的合适位置。
或者如您所说,如果您感到懒惰,请在MissingParamError::new
中进行。
实际上,如果你切换到 RefCell<Option<String>>
以获得内部可变性,你可以使用第二种解决方法,但这有点矫枉过正。
实际上,你不能,因为你无法从RefCell
获得长期借用(感谢@bluss)。