代码如下:
我们是否可以添加一种语法来支持类似的功能? 例如
fn main() {
let arg = | | println!("closure");
let call_twice = | c | { c(); c(); };
call_twice(arg);
}
但编译器无法推断参数c
的正确类型。错误信息:
error: the type of this value must be known in this context
我该如何告诉编译器参数的类型是一个实现了Fn
trait 的泛型类型?
编辑:如果参数类型是 trait object,那么代码可以被编译器接受。但这个间接引用是必要的吗?
fn main() {
let arg = | | println!("closure");
let call_twice = | c :&Fn() | { c(); c(); };
call_twice(&arg);
}
感谢你的回答。但是我被类型推断问题所困扰。使用fn
可以让编译器满意。
fn main() {
let arg = | | println!("closure");
// now compiler knows the argument `c` is a closure
fn call_twice<F>(c: F) where F:Fn() {c(); c();}
call_twice(arg);
}
我们是否可以添加一种语法来支持类似的功能? 例如
for<F> | c:F | where F:Fn() {c(); c();}
. 与此类似的IT技术相关内容。