在这里的代码更高级别的寿命和仿制药不玩很好
trait Foo {
type Output;
fn foo(self) -> Self::Output;
}
impl<'a> Foo for &'a() {
type Output = &'a();
fn foo(self) -> Self::Output {
self
}
}
fn func<F: Foo>(f: F) -> F::Output {
f.foo()
}
fn func2<'a>(f: &'a()) -> &'a() {
func::<&'a()>(f)
}
fn has_hrl<F: Fn(&()) -> &()>(f: F) {}
fn main() {
//has_hrl(func); // FAILS
has_hrl(func2);
has_hrl(|x| func(x));
}
我们愿做has_hrl(func)
,但锈病只接受封闭has_hrl(|x| func(x))
。这是为什么?因为它适用于func2
等具体类型,但不适用于泛型类型。
如果你声明'has_hrl'就像'fn has_hrl <'a,F:Fn(&'a()) - >&'a()>(_:F){}',这就可以工作。不过,我的权力水平并不足以解释为什么一生需要明确。 – ljedrz