我理解ip
在匹配后的代码块中作用域。我的理解是,当该代码块退出时,它将释放ip
,因此我无法将其分配给server_ip
。如何让ip
延长寿命?
let address_default = "127.0.0.1";
let address = matches.opt_default("i", address_default);
let server_ip = match address {
Some(ip) => {
ip.as_slice()
}
None => {
address_default
}
};
答案 0 :(得分:2)
address
是Option<String>
。然后,您正在继续移动ip
,将ip.as_slice()
悬挂的引用留下,ip
将在该块的末尾释放。
此级别的主要解决方案是通过address
只将引用设为ip
而不是String
来保持String
有效。本身。这是通过将Some(ip)
模式更改为Some(ref ip)
来完成的。
您可能希望http://chrismorgan.info/blog/rust-fizzbuzz.html进一步阅读此特定主题(处理拥有的数据等等,但不是Option<T>
不重要的部分。)