В некоторых случаях может передать закрытие в качестве указателя на функцию.Это работает:
fn main() {
let x = || {
let a = String::from("abc");
println!("{}", a);
};
fn wrap(c: fn()) {
c()
}
wrap(x);
}
Важным отличием является то, что закрытие не может захватывать что-либо из своего окружения.Это означает, что мы должны были предотвратить пересечение границ String
границы замыкания.
Любое замыкание, которое не захватывает среду, может быть тривиально переписано как анонимная автономная функция, а затем преобразовано в указатель на функцию.
Как только вы добавляете среду, она больше не конвертируется, и все, начиная с , применяется существующий ответ .
Обратите внимание, что указание -> ()
не является идиоматическим, так как это значение по умолчанию, еслиничего не указано.
См. также: