是什么使函数特征类型能够在需要 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);
}
是吗:
- 每个对应的
fn
类型的 Fn
的实现?
- 或强制转换,例如 the the one from
Fn
to fn
我问的更多是心智模型,而不是具体实施。
编辑
更新了示例,之前的示例以另一种方式显示了转换。对于那个很抱歉。我创建了一个单独的问题来以另一种方式询问转换:
是前者(编译器产生的实现)。来自 documentation.
all safe function pointers implement Fn
, FnMut
, and FnOnce
. This works because these traits are specially known to the compiler.
我有时认为这是因为 fn
是一个 Fn
,它不会从环境中捕获任何东西。
是什么使得函数特征类型 (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);
}
是吗:
- 每个对应的
fn
类型的Fn
的实现? - 或强制转换,例如 the the one from
Fn
tofn
我问的更多是心智模型,而不是具体实施。
编辑
更新了示例,之前的示例以另一种方式显示了转换。对于那个很抱歉。我创建了一个单独的问题来以另一种方式询问转换:
是前者(编译器产生的实现)。来自 documentation.
all safe function pointers implement
Fn
,FnMut
, andFnOnce
. This works because these traits are specially known to the compiler.
我有时认为这是因为 fn
是一个 Fn
,它不会从环境中捕获任何东西。