【发布时间】:2016-04-14 16:53:44
【问题描述】:
代码如下:
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 对象,代码可以被编译器接受。但是间接不是必需的,是吗?
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();}。
【问题讨论】:
-
我们可以添加一个语法来支持类似的功能吗? 这不是 Stack Overflow 的问题,你可以在 reddit (r/rust) 或 Rust 论坛上提问。
标签: closures rust type-inference