Ich versuche, eine Funktion zu schreiben, die zwei Funktionen zusammenstellt, das anfängliche Design ist ziemlich einfach eine Funktion, die zwei Funktionen übernimmt und eine zusammengesetzte Funktion zurückgibt, die ich dann mit anderen Funktionen zusammensetzen kann (da Rost keine Ruhe hat Parameter). Aber ich bin in eine lange, harte Mauer gerannt, die frustrierende, nicht hilfreiche Compiler-Fehler eingebaut hat.
Meine Kompositionsfunktion:
%Vor%Wie ich es gerne benutzen würde:
%Vor%rustc mag das nicht, egal was ich versuche, Merkmalsgrenzen werden nie befriedigt. Der Fehler ist:
%Vor%Wie @ljedrz darauf hinweist , um es funktionieren zu lassen, müssen Sie nur noch auf die zusammengesetzten Funktionen verweisen:
> %Vor%(Beachten Sie, dass in Rust die Konvention vorschreibt, dass Variablennamen in snake_case sein sollten)
Aber wir können das besser machen!
Wenn Sie bereit sind, experimentelle Features zu verwenden, #![feature(conservative_impl_trait)]
, die die Verwendung von abstract return types , kann Ihnen helfen, Ihr Beispiel zu vereinfachen, da es Ihnen ermöglicht, die Lebensdauern, Referenzen, Sized
constraints und Box
es:
Schließlich, da Sie Restparameter erwähnen, vermute ich, dass Sie tatsächlich eine Möglichkeit haben möchten, beliebig viele Funktionen flexibel zu ketten. Ich habe dieses Makro für diesen Zweck geschrieben:
%Vor% Fügen Sie einfach Referenzen in finally
hinzu und es wird funktionieren:
Die Dereferenzierung von addAndMultiply
oder divideAndSubtract
deckt ein Objekt auf, das nicht Sized
ist; es muss entweder in eine Box
eingeschlossen oder referenziert werden, damit es an eine Funktion mit einer Sized
Einschränkung übergeben wird.
Tags und Links functional-programming rust