ржавчиной, вы можете взять в качестве ссылки к Fn
в documented:Может черта передается в качестве ссылки Fn или закрытия
fn call_with_one(some_closure: &Fn(i32) -> i32) -> i32 {
some_closure(1)
}
let answer = call_with_one(&|x| x + 2);
Однако я хочу, чтобы написать признак, который, в случае его реализации Runnable может быть передано на все, что ожидает Fn()
. Это возможно?
trait Runnable {
fn run(&self);
}
struct MyRunnable;
impl Runnable for MyRunnable {
fn run(&self) {}
}
struct StructThatTakesClosure<'life> {
closure_field: &'life Fn(),
}
fn main() {
// is there a way to change the Runnable trait to automatically match the
// Fn() interface such that the MyRunnable instance can be passed directly?
StructThatTakesClosure { closure_field: &|| MyRunnable.run() };
}
Я попытался реализации вызовов 3 обычно extern
как функции по умолчанию, но я не смог заставить его работать.