Wie unterscheidet sich die `for<>`-Syntax (Higher-Ranked Trait Bounds) von normalen Lifetime-Bounds in Rust?
Hallo zusammen! Ich schreibe seit ein paar Monaten Rust, aber ich bin immer noch verwirrt bei komplexen Lifetime-Themen. Kürzlich bin ich auf die `for<'a>`-Syntax gestoßen und kann nicht verstehen, wie sie sich von normalen Lifetime-Bounds unterscheidet.
Hier ist ein Beispiel, das mich verwirrt hat. Ich habe eine Funktion, die ein Closure akzeptiert, das mit jeder Lifetime arbeitet:
```rust
fn example(f: F)
where
F: Fn(&str) -> &str
{
let s = String::from("hello");
println!("{}", f(&s));
}
```
Aber wenn ich versuche, ein Closure zu übergeben, das eine Referenz auf das Argument zurückgibt, funktioniert alles. Wenn ich jedoch möchte, dass das Closure eine Referenz mit beliebiger Lifetime akzeptiert, sehe ich in der Dokumentation diese Syntax:
```rust
fn example(f: F)
where
F: for<'a> Fn(&'a str) -> &'a str
{
// ...
}
```
Was ist der Unterschied?