考虑以下代码段:
use std::fmt;
enum TestEnum {
StructMem {value: i32, is_valid: bool},
RandoMem,
}
impl fmt::Display for TestEnum {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
use TestEnum::*;
match self {
StructMem {value, is_valid} => {
if *is_valid { // Why dereference is_valid ?
write!(f, "f")?
}
write!(f, "{:?}", value)
}
RandoMem => {
f.write_str("Random")
}
}
}
}
为什么我需要取消引用 is_valid
在 if
陈述?编辑:这个问题What is the syntax to match on a reference to an enum?似乎正在处理类似的情况,但答案都集中在解决特定问题(不涉及结构)上,并没有解释所有权/绑定(bind)语义。
最佳答案
这不是 match
所特有的。或 enum
但由于 fmt()
的签名, 这需要 self
作为引用( &self
而不是 self
,如果取得所有权)。match self
,因此,已经引用了 TestEnum
的借用实例和火柴臂StructMem {value, is_valid}
通过引用( &i32
和 &bool
)绑定(bind)。这就是为什么is_valid
最终成为 &bool
,而不是 bool
.
关于rust - 为什么解构借用的枚举需要取消引用其字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66201228/