Wie komponiert man Funktionen in Rost?

8

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%     
Seun LanLege 20.08.2017, 21:27
quelle

2 Antworten

11

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:

zu überspringen %Vor%

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%     
Jan Nils Ferner 21.08.2017, 08:27
quelle
6

Fügen Sie einfach Referenzen in finally hinzu und es wird funktionieren:

%Vor%

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.

    
ljedrz 21.08.2017 08:21
quelle

Tags und Links