Avatar ·

Idiomatische Callbacks in Rust: Wie man eine Funktion übergibt und den Borrow Checker vermeidet

Hallo zusammen! Ich schreibe seit etwa einem Monat in Rust, bin von JavaScript umgestiegen und habe ein Problem mit der Implementierung von Callbacks. In JS war ich es gewohnt, eine Funktion einfach als Argument zu übergeben: `doSomething(callback)`. In Rust versuche ich dasselbe zu tun, bekomme aber Fehler vom Borrow Checker. Hier ist mein Code: ```rust struct Processor { callback: fn(i32) -> i32, } impl Processor { fn new(cb: fn(i32) -> i32) -> Self { Processor { callback: cb } } fn process(&self, x: i32) -> i32 { (self.callback)(x) } } fn double(x: i32) -> i32 { x * 2 } fn main() { let proc = Processor::new(double); println!("{}", proc.process(5)); // 10 } ``` Das funktioniert, aber nur für normale Funktionen. Wenn ich ein Closure übergeben möchte, das Variablen aus der Umgebung erfasst, beschwert sich der Compiler: ```rust let multiplier = 3; let proc = Processor::new(|x| x * multiplier); // error[E0277]: expected a `fn` pointer, found closure ``` Wie organisiere ich das richtig?