【发布时间】:2016-04-13 06:44:09
【问题描述】:
似乎 Rust 的 enum types 的每个介绍性文档都解释了如何在您拥有的枚举对象上使用 match,但是如果您不拥有该枚举对象而您只有一个引用它,你想匹配?我不知道语法是什么。
这是我尝试匹配枚举引用的一些代码:
use std::fmt;
use std::io::prelude::*;
pub enum Animal {
Cat(String),
Dog,
}
impl fmt::Display for Animal {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Animal::Cat(c) => f.write_str("c"),
Animal::Dog => f.write_str("d"),
}
}
}
fn main() {
let p: Animal = Animal::Cat("whiskers".to_owned());
println!("{}", p);
}
Rust Playground 在尝试编译时在匹配的前两种情况下给出错误:
error[E0308]: mismatched types
--> src/main.rs:12:13
|
12 | Animal::Cat(c) => f.write_str("c"),
| ^^^^^^^^^^^^^^ expected &Animal, found enum `Animal`
|
= note: expected type `&Animal`
= note: found type `Animal`
error[E0308]: mismatched types
--> src/main.rs:13:13
|
13 | Animal::Dog => f.write_str("d"),
| ^^^^^^^^^^^ expected &Animal, found enum `Animal`
|
= note: expected type `&Animal`
= note: found type `Animal`
如何更改该代码以使其编译?我尝试在许多不同的地方添加&符号,但没有任何运气。甚至可以匹配对枚举的引用吗?
【问题讨论】:
-
在Rust roadmap 上可以改善这里的情况。
-
从 Rust 1.26 开始,情况有所改善,请参阅 Shepmaster's answer。
标签: rust