String 如何延长选项中T的寿命<;T>;

String 如何延长选项中T的寿命<;T>;,string,rust,lifetime,String,Rust,Lifetime,我知道ip的范围在匹配后的代码块中。我的理解是,当代码块退出时,它将释放ip,因此我无法将其分配给server\u 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() }

我知道
ip
的范围在匹配后的代码块中。我的理解是,当代码块退出时,它将释放
ip
,因此我无法将其分配给
server\u 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
    }
};

地址
选项
。然后继续将
ip
移出,保留由
ip创建的引用。as_slice()
悬空,因为
ip
将在该块末尾释放

此级别的主要解决方案是通过使
ip
仅引用
字符串而不是
字符串本身来保持
地址
处于活动状态。这是通过将
Some(ip)
模式更改为
Some(ref ip)
来实现的

您可能希望进一步阅读此特定主题(处理自有数据等,但不是不重要的
选项
部分)