字符串到str切片,str切片的寿命不够长

时间:2015-10-08 15:49:18

标签: string static rust slice borrow-checker

好的,这就是我的MCVE,马上就开始了。

fn do_something (string: &'static str) -> Result<&str, isize> {
    Ok(string)
}

fn main() {
    let place = Some("hello".to_string());
    match place {
        Some(input) => {
            let place = &input[..];
            let something = do_something(place);
        }
        _ => (),
    }
}

我似乎无法找到满足do_something的方法。在我的实际代码中,do_something是一个库函数,因此我无法更改它的签名。

- 谢谢

1 个答案:

答案 0 :(得分:0)

如果您无法更改函数的签名,则需要使用字符串文字来创建&'static str或泄漏内存。

即。要么这样做:

do_something("hello");

或者这个(糟糕的主意,可能会破坏,只适用于每晚):

let place = Some("hello".to_string());
if let Some(s) = place {
    do_something(unsafe { std::mem::transmute(s.into_boxed_str()) });
}