Rust Can';是否返回引用? fn main(){ 设a=String::from(“foo”); 设f=|&a; fn_免疫(f); println!(“{}”,a); } fn fn_免疫(f:f) 其中F:Fn()->&String { println!(“从Fn,{},f()调用Fn闭包); }
这段代码无法编译,Rust Can';是否返回引用? fn main(){ 设a=String::from(“foo”); 设f=|&a; fn_免疫(f); println!(“{}”,a); } fn fn_免疫(f:f) 其中F:Fn()->&String { println!(“从Fn,{},f()调用Fn闭包); },rust,Rust,这段代码无法编译,rustc告诉我应该像这样添加一个'static: fn-fn\u免疫(f:f) 其中F:Fn()->&'静态字符串 我试过了,但还是不行。而且rustc还告诉我“这个函数的返回类型包含一个借来的值,但没有可借来的值” 我的问题是:在这段代码中,闭包已经在它的作用域中捕获了变量a的引用,为什么rustc仍然告诉我“它没有可借来的值”编译器的关键消息确实是,对于返回字符串的闭包,缺少生命周期说明符。由于traitFn()->&String定义的签名没有任何函数参数,因此编译器无
rustc
告诉我应该像这样添加一个'static
:
fn-fn\u免疫(f:f)
其中F:Fn()->&'静态字符串
我试过了,但还是不行。而且rustc
还告诉我“这个函数的返回类型包含一个借来的值,但没有可借来的值”
我的问题是:在这段代码中,闭包已经在它的作用域中捕获了变量
a
的引用,为什么rustc仍然告诉我“它没有可借来的值”编译器的关键消息确实是,对于返回字符串的闭包,缺少生命周期说明符。由于traitFn()->&String
定义的签名没有任何函数参数,因此编译器无法从中推断返回引用的生存期
错误[E0106]:缺少生存期说明符
-->src/main.rs:10:16
|
10 | F:Fn()->字符串,
帮助:考虑给它一个“静态生命:”和“静态”
|
=帮助:此函数的返回类型包含借用值,但没有可供借用的值
在这里添加“static
无助于解决问题,因为实际上返回的字符串没有那个生存期。需要在fn_immut
中引入一个新的生存期参数,从该参数可以传输到F
的约束
fn fn_immut<'a, F>(f: F)
where
F: Fn() -> &'a String,