提问人:Abhimanyu Sharma 提问时间:1/19/2023 最后编辑:Peter HallAbhimanyu Sharma 更新时间:1/19/2023 访问量:100
在 rust 中获取“必须指定关联类型'Output'(来自特征'FnOnce')的值”
getting "the value of the associated type `Output` (from trait `FnOnce`) must be specified" in rust
问:
我有一个函数,它接受 3 个参数,即 a、b 和一个接受它们的函数并返回该函数产生的值。
fn from_func<T>(a: i32, b: i32, func: Fn) -> i32 {
func(a, b)
}
但是当我调用它时:
fn main() {
let my_func = |a: i32, b: i32| a + b;
println!("{:?}", from_func(15, 20, my_func));
}
我得到了
error[E0191]: the value of the associated type `Output` (from trait `FnOnce`) must be specified
--> src\main.rs:5:34
|
5 | fn from_func<T>(a:i32,b:i32,func:Fn)->i32{
| ^^ help: specify the associated type: `Fn<Output = Type>`
我尝试使用关键字,它起作用了where
fn from_func<T>(a: i32, b: i32, func: T) -> i32
where
T: Fn(i32, i32) -> i32
{
func(a,b)
}
但是还有其他方法可以做到这一点吗?
答:
1赞
Peter Hall
1/19/2023
#1
但是还有其他方法可以做到这一点吗?
必须约束类型变量以提供函数的参数和返回类型。你可以用一个子句来做到这一点,这可能是最好的,因为它在另一行,所以使签名不那么混乱。where
但是你可以这样做:
fn from_func<F: Fn(i32, i32) -> i32>(a: i32, b: i32, func: F) -> i32 {
func(a, b)
}
或者,通过使用特征来避免使用命名类型变量,如下所示:impl
fn from_func(a: i32, b: i32, func: impl Fn(i32, i32) -> i32) -> i32 {
func(a, b)
}
上一个:如何在闭包中访问孙子变量
下一个:如何将 fn 指针转换为闭包
评论