我一直运行到这个问题的时候,我不太明白,为什么就不能编译如下:“借来的价值不活足够长的时间”使用'as_slice`
fn foo(bar: &'static str) -> Foo {
let caps_off = bar.to_ascii_lower().as_slice();
...
}
错误:borrowed value does not live long enough
我有点理解这里的错误,但我不知道任何其他方式来实现这一点。
我尝试将我的str
转换为小写&然后将其转换回str
类型。看起来很简单。
我在做什么错在这里&我该如何解决它?
全码:
use std::collections::HashMap;
use std::ascii::StrAsciiExt;
struct Foo;
fn foo(bar: &'static str) -> Foo {
let caps_off_ = bar.to_ascii_lower();
let caps_off = caps_off_.as_slice();
let mut my_foos:HashMap<&'static str, Foo> = HashMap::new();
my_foos.insert("hi", Foo);
*my_foos.find(&caps_off).clone().unwrap()
}
请参阅上面的完整代码。这很混乱。有没有一种方法可以手动告诉编译器:“我还没有使用'caps_off'完成”? – goo 2014-09-24 14:44:46
如果你把一个可以编译的代码显示出你的错误,我可以帮你。这一定是关于生命的事情。 – snf 2014-09-24 18:38:30
好吧,当然。请参阅我的编辑。代码应该现在编译 – goo 2014-09-24 21:29:31