是什么使函数特征类型能够在需要 fn 类型的地方使用?

What enables a function trait type to be used where an fn type is expected?

是什么使得函数特征类型 (std::ops::Fn) 可以用于需要 fn 类型(例如闭包、函数定义、fn 指针类型)的地方?

fn take_closure<F: Fn(u32) -> u32>(_f: F) {}

fn id(x: u32) -> u32 {
    x
}

fn main() {
    take_closure(id);
}

是吗:

我问的更多是心智模型,而不是具体实施。

编辑

更新了示例,之前的示例以另一种方式显示了转换。对于那个很抱歉。我创建了一个单独的问题来以另一种方式询问转换:

是前者(编译器产生的实现)。来自 documentation.

all safe function pointers implement Fn, FnMut, and FnOnce. This works because these traits are specially known to the compiler.

我有时认为这是因为 fn 是一个 Fn,它不会从环境中捕获任何东西。