Ich versuche, ein Merkmal für Top-Level-Funktionen in Rust nutzbar machen.Fehlende Implementierung für Top-Level-Funktionen
trait FnTrait {
fn call(self);
}
impl FnTrait for fn() {
fn call(self) {
self()
}
}
fn foo() {
println!("Hello, World!")
}
fn main() {
FnTrait::call(foo)
}
jedoch der Code unten mit (Playground Link)
error[E0277]: the trait bound `fn() {foo}: FnTrait` is not satisfied
--> <anon>:16:5
|
16 | FnTrait::call(foo)
| ^^^^^^^^^^^^^ the trait `FnTrait` is not implemented for `fn() {foo}`
|
= help: the following implementations were found:
<fn() as FnTrait>
= note: required by `FnTrait::call`
ich, dass ich es foo
durch Gießen zu kompilieren Trick kann wie so
FnTrait::call(foo as fn())
gefunden zu kompilieren schlägt fehl Aber es ist ärgerlich und Einige der Funktionen in meinem Programm sind komplizierter als foo
. Irgendeine Möglichkeit, die Besetzung zu vermeiden? Ist mein Zug irgendwie falsch?