我想编写一个接收Thread.sleep()
参数并返回for (int i = 0; i < 20; i++) {
final long millisToDelay = (long) (2000 * Math.random() - 1000);
System.out.println("Millis To Delay: " + millisToDelay);
Thread.sleep(millisToDelay);
}
的函数。我写了这个:
&str
但是我收到了错误:
Option<&str>
的寿命不够长。
解决此问题的最佳解决方案是什么?
答案 0 :(得分:6)
您无法返回指向本地&str
变量的String
。这样做意味着您刚刚返回一个悬空指针,因为当函数返回时,String
(res
在您的代码中)被销毁。
解决问题的最佳方法可能是返回Option<String>
,即返回拥有的字符串而不是字符串切片。调整代码,最终会得到类似的结果:
fn f(text: &str) -> Option<String> {
if // some condition {
return None;
}
let mut res = String::new();
// write something into res.
Some(res)
}