Zum Inhalt springen

Closures

Welche der folgenden Aussagen beschreibt am besten die Begründung, warum Rust die Typen von Argumenten/Rückgabewerten für Closures, aber nicht für Top-Level-Funktionen inferiert?

Rust könnte theoretisch Typinferenz für Top-Level-Funktionen bereitstellen. Funktionale Sprachen wie Haskell und OCaml verfügen über diese Funktion. Die Rust-Designer haben jedoch bewusst entschieden, Typannotationen für Top-Level-Funktionen zu verlangen, um die Klarheit auf der Schnittstellenebene zu fördern: Eine Funktion wird immer genau den Typ haben, den sie angibt.


Rust erlaubt Pattern Matching innerhalb von Closure-Argumenten, einschließlich der Verwendung des Unterstrichs. Zum Beispiel könnten Sie Folgendes schreiben:

let f = |_| (); // manchmal als "Toilet Closure" bezeichnet
let s = String::from("Hello");
f(s);

Welche der folgenden Aussagen beschreibt am besten die Beziehung zwischen f und s in diesem Programm?

Die „Toilet Closure“ ähnelt std::mem::drop, d.h. einer Funktion, die ein Argument verschiebt und bewirkt, dass es fallen gelassen wird (dropped).