我一直運行到這個問題的時候,我不太明白,爲什麼就不能編譯如下:「借來的價值不活足夠長的時間」使用'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