【发布时间】:2019-12-08 22:27:48
【问题描述】:
刚开始我在 Rust 中的冒险并试图找出正确的方法来创建和返回一个枚举,该枚举应该拥有一个 &str 字符串切片的所有权,该切片是从传递给该方法的字符串创建的。我认为生命周期注释本身并不能解决问题,因为无论如何原始字符串参数将超出函数块末尾的范围。任何帮助将不胜感激。
pub enum PubSubMessage {
// For now I won't worry about subbing/unsubbing to an array of channels
SUBSCRIBE { channel: &str },
UNSUBSCRIBE { channel: &str },
PUBLISH { channel: &str, msg: &str},
PSUBSCRIBE { pattern: &str },
PUNSUBSCRIBE { pattern: &str},
}
pub fn parse_message(msg: String) -> Result<PubSubMessage, String> {
let msg_contents: Vec<&str> = msg.split(" ").collect();
return match msg_contents.as_slice() {
["SUBSCRBE", channel] => Ok(PubSubMessage::SUBSCRIBE { channel }),
["UNSUBSCRIBE", channel] => Ok(PubSubMessage::UNSUBSCRIBE { channel }),
["PUBLISH", channel, msg] => Ok(PubSubMessage::PUBLISH { channel, msg }),
_ => Err("Could not parse ws message.".to_string())
}
}
我得到的当前编译器错误只是枚举定义需要生命周期参数。
【问题讨论】:
-
如果您想要所有权,您通常会将值保留为
String。在这里想要&str的动机是什么?正如您所定义的那样,函数签名是不可能的,因为在函数调用之后没有任何地方可以借用它。 -
这能回答你的问题吗? Return local String as a slice (&str)
-
tl;dr: 使用
String拥有字符串。
标签: rust