【发布时间】:2017-12-18 12:12:57
【问题描述】:
我想返回城市/城镇/村庄的名称作为对str 的引用。我可以在实现中指定生命周期,但也为枚举指定它会导致错误,因为它没有声明引用。
enum CityType {
City { name: String /* ... */ },
Town { name: String /* ... */ },
Village { name: String /* ... */ },
}
impl CityType {
fn name(self) -> &str {
match self {
CityType::City { name } => &name,
CityType::Town { name, .. } => &name,
CityType::Village { name } => &name,
}
}
}
【问题讨论】:
-
您希望
name方法具体做什么?它有多个问题,答案可能取决于您的意图。 -
@VictorPolevoy 在这种情况下只需将 ref 返回到字符串。问题更普遍:如何将 ref 返回到没有生命周期说明符的字符串,因为它的生命周期与枚举一样长。
-
你需要(重新)阅读 Rust 书中的 What is ownership 章节。
name(self)获得枚举的所有权,并在函数返回时释放枚举。您不能返回对已释放枚举的引用。
标签: rust borrow-checker