Rust 铁锈中Fn(&;某物)的实施特征
下面是一个为Rust 铁锈中Fn(&;某物)的实施特征,rust,traits,lifetime,Rust,Traits,Lifetime,下面是一个为Fn()实现Runnable的工作示例(这样我们就可以直接将&close传递给run\u Runnable函数): () 通过关闭不再有效: error[E0271]:根据a中的建议,为解决类型不匹配问题,在闭包参数中给出显式类型修复了问题: @@ -26,8 +26,8 @@ fn main() { // from struct instance (WORKS) run_the_runnable(&MyRunnable, &x); - /
Fn()
实现Runnable
的工作示例(这样我们就可以直接将&close传递给run\u Runnable
函数):
()
通过关闭不再有效:
error[E0271]:根据a中的建议,为解决类型不匹配问题,在闭包参数中给出显式类型修复了问题:
@@ -26,8 +26,8 @@ fn main() {
// from struct instance (WORKS)
run_the_runnable(&MyRunnable, &x);
- // from closure (DOES NOT WORK)
- run_the_runnable(&|x| {
+ // from closure with annotated type (WORKS)
+ run_the_runnable(&|x: &i32| {
println!("Hello from run(&i32) closure {}", x);
}, &x);
}
()添加显式类型注释帮助。例如,说&|x:&i32{…}
已经解决了这个问题。在这些情况下,Rust似乎在推断类型方面存在问题:/至少我认为问题在于此。
trait Runnable {
fn run(&self, x: &i32);
}
impl<F> Runnable for F where F: Fn(&i32) {
fn run(&self, x: &i32) {
self(x);
}
}
fn run_the_runnable(runnable: &Runnable, x: &i32) {
runnable.run(x);
}
fn main() {
// runnable without parameters
struct MyRunnable;
impl Runnable for MyRunnable {
fn run(&self, x: &i32) {
println!("Hello from MyRunnable {}", x);
}
}
let x = 42;
// from struct instance (WORKS)
run_the_runnable(&MyRunnable, &x);
// from closure (DOES NOT WORK)
run_the_runnable(&|x| {
println!("Hello from run(&i32) closure {}", x);
}, &x);
}
@@ -26,8 +26,8 @@ fn main() {
// from struct instance (WORKS)
run_the_runnable(&MyRunnable, &x);
- // from closure (DOES NOT WORK)
- run_the_runnable(&|x| {
+ // from closure with annotated type (WORKS)
+ run_the_runnable(&|x: &i32| {
println!("Hello from run(&i32) closure {}", x);
}, &x);
}