gpt4 book ai didi

rust - 为什么解构借用的枚举需要取消引用其字段?

转载 作者:行者123 更新时间:2023-12-03 11:40:59 26 4
gpt4 key购买 nike

考虑以下代码段:

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_validif陈述?
编辑:这个问题 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com