Rust 一个独立的闭包是否需要`&;str`and return`&;有相同的生命吗?
代码: 错误:Rust 一个独立的闭包是否需要`&;str`and return`&;有相同的生命吗?,rust,Rust,代码: 错误: 错误:生命周期可能不够长 -->src/main.rs:2:25 | 2 |设f=| str:&str | str.trim(); |-^^^^^^^^^返回此值要求“1”必须比“2”寿命长` | | | ||闭合的返回类型为&'2 str |让我们将此引用的生存期称为“1”` 如果将相同的闭包用作函数的参数,例如vec.iter().map(| str | str.trim()),则该闭包也可以工作 像在我的代码中一样,独立闭包是否可
错误:生命周期可能不够长
-->src/main.rs:2:25
|
2 |设f=| str:&str | str.trim();
|-^^^^^^^^^返回此值要求“1”必须比“2”寿命长`
| | |
||闭合的返回类型为&'2 str
|让我们将此引用的生存期称为“1”`
如果将相同的闭包用作函数的参数,例如vec.iter().map(| str | str.trim())
,则该闭包也可以工作
像在我的代码中一样,独立闭包是否可能接受
&str
并以相同的生存期返回&str
?不确定推理失败的原因,但出于某种原因,借用检查器对闭包上的注释的处理与fn
上的注释不同
这项工作:
TL;DR:没有。另外,请注意原始问题,它比公认的答案有用得多。谢谢@user4815162342和Shepmaster,我现在明白了。
fn(&str)->&str
会将闭包强制为函数指针,这(在这个小例子中可能是相同的,但是)可能会抑制内联和/或需要间接寻址。此外,闭包不能捕获任何内容,因此您可以只编写fnf(s:&str)->&str{s.trim()}
。Shepmaster对链接问题的回答没有这两个缺点。这是一个很好的技巧,我不知道您可以为fn(…)->类型的变量指定闭包。但是我怀疑这对OP的实际用例没有帮助,因为它可能需要一个捕获闭包,而不是fn()
。
fn main() {
let f = |str: &str| str.trim();
println!("{}", f(" foo bar "));
}
fn main() {
let f: fn(&str) -> &str = |s| s.trim();
println!("{}", f(" foo bar "));
}