gpt4 book ai didi

enums - 我怎么能跳过一个电话来写呢! fmt::Display 的模式匹配时?

转载 作者:行者123 更新时间:2023-11-29 08:23:33 24 4
gpt4 key购买 nike

考虑以下枚举:

enum SomeEnum { A, B, C }

以及以下 fmt::Display 实现:

impl fmt::Display for SomeEnum {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use SomeEnum::*;

match *self {
A => write!(f, "A"),
B => write!(f, "B"),
// I'm not interested in calling write! for C
}
}
}

是否可以在模式匹配时跳过对一个特定枚举值(在本例中为 C)的 write! 函数调用?

最佳答案

因为 fmt 的返回类型是 fmt::Result,你只需要提供一个空的 Ok(())match 的所有可能返回值的顺序具有相同的类型(以及要编译的代码):

impl fmt::Display for SomeEnum {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use SomeEnum::*;

match *self {
A => write!(f, "A"),
B => write!(f, "B"),
C => Ok(()),
}
}
}

另一种方法是使用 C => unreachable!(),但只有当您确定永远不需要 Display 时,这是一个好主意ed(否则会引起 panic )。

关于enums - 我怎么能跳过一个电话来写呢! fmt::Display 的模式匹配时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50101029/

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