在這裏的代碼更高級別的壽命和仿製藥不玩很好
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