用自己的字符串实现错误描述
Implementing Error description with own string
我想实现一个使用错误参数之一的错误描述,但我找不到方法来return一个不会消失的描述。
#[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
(其全部目的是格式化一个值以显示给用户),that 将是生成重要消息的合适位置。
或者按照您的建议,如果您觉得懒惰,请在 MissingParamError::new
中进行。
实际上,如果您切换到 RefCell<Option<String>>
以获得内部可变性,您 可以 使用第二种解决方法,但这有点矫枉过正。
实际上,你不能,因为你无法从 RefCell
中获得长期借用(谢谢,@bluss)。
我想实现一个使用错误参数之一的错误描述,但我找不到方法来return一个不会消失的描述。
#[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
(其全部目的是格式化一个值以显示给用户),that 将是生成重要消息的合适位置。
或者按照您的建议,如果您觉得懒惰,请在 MissingParamError::new
中进行。
实际上,如果您切换到 RefCell<Option<String>>
以获得内部可变性,您 可以 使用第二种解决方法,但这有点矫枉过正。
实际上,你不能,因为你无法从 RefCell
中获得长期借用(谢谢,@bluss)。