【发布时间】:2021-01-01 17:45:57
【问题描述】:
我有带有值变量的枚举:
enum Foobar<T, G> {
Foo,
Bar(T),
Baz(G),
}
我有一段代码需要匹配枚举值,但我不想破坏它。
fn foobar<T, G, F1, F2>(value: Foobar<T, G>, f1: F1, f2: F2) -> bool
where
F1: Fn(T) -> bool,
F2: Fn(G),
{
let res = match value {
Foobar::Foo => true,
Foobar::Bar(v) => f1(v),
Foobar::Baz => false,
};
if let Foobar::Baz(v2) = value {
f2(v2);
}
res
}
它不会编译,因为expected unit struct, unit variant or constant, found tuple variant Foobar::Baz
我不想将其更改为 Foobar::Baz(_),因为它会强制 G 上的 Copy trait,我不想要它。
我的例子有点人为,但假设我需要单独调用f2。
有没有办法匹配枚举变体而不破坏它?
【问题讨论】:
标签: rust pattern-matching move-semantics