Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 一个独立的闭包是否需要`&;str`and return`&;有相同的生命吗?_Rust - Fatal编程技术网

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  "));
}