【发布时间】:2021-10-31 00:59:54
【问题描述】:
我有一个枚举:
pub enum BoxColour {
Red,
Blue,
}
我不仅要get this value as a string,还希望将值转换为小写。
这行得通:
impl Display for BoxColour {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
fmt.write_str(match self {
BoxColour::Red => "red",
BoxColour::Blue => "blue",
})?;
Ok(())
}
}
当颜色列表增加时,需要更新此列表。
如果我使用write! 宏,似乎无法操纵结果,因为write! 返回() 的实例而不是String:
impl Display for BoxColour {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(formatter, "{:?}", self)
}
}
这表明这是通过副作用工作的,也许我们可以破解内存中值所在的相同位置,但即使可以,这也可能不是一个好主意...
【问题讨论】:
-
write!返回一个()的实例——它没有。它返回一个fmt::Result,如返回类型fmt所示。 -
...而
fmt::Result是type的Result<(), fmt::Error>。 -
您已经回答了您提出的问题(“如何以小写形式显示枚举?”)。请明确说明您在问什么。
-
you've linked to 的问题有一个使用 strum 的答案,strum allows you to customize what the
Displayformat will be。您似乎已链接到合适的解决方案。 -
@Shepmaster,感谢您的回复。 @Smitop 正确理解了我的意图(如下)。是的,我的意思是指出
Result的成功路径是()而不是String或者我可能知道如何使用的东西。我看到了strum,但也无法让它发挥作用,但这是另一天的问题。
标签: rust enums display lowercase write