Wie verwende ich eine Kiste aus einer anderen Kiste, ohne explizit eine neue Abhängigkeit in meinem Projekt zu definieren?

8

Ich möchte die Funktion dijkstra von der pathfinding crate verwenden :

%Vor%

Um es zu verwenden, muss ich das Zero Merkmal aus dem num_traits Kiste. Aber wie kann ich Zero importieren? Ein naheliegender Weg ist, extern crate num_traits; in meine Kiste einzufügen und meine Cargo.toml entsprechend zu fixieren. Aber dabei muss ich auf eine Abhängigkeit einer Abhängigkeit achten, die nicht gut ist.

Kann ich irgendwie Zero ohne explizite Abhängigkeit von num_traits implementieren? Kiste, wie unten?

%Vor%     
user1244932 02.07.2017, 23:42
quelle

1 Antwort

6

Angesichts der ursprünglichen Absicht, nicht exponierte Abhängigkeiten von einer Kiste (z. B. pathfinding ) in ein abhängiges Projekt zu importieren, ist dies derzeit nicht zulässig. Wenn eine Abhängigkeit nicht von der Kiste erneut exportiert wird, ist dies eher ein Implementierungsdetail als ein Teil der API. Es wäre daher katastrophal, einem Abhängigen zu erlauben, auf irgendeine "Unterabhängigkeit" zuzugreifen.

Da in diesem Fall jedoch num_traits eindeutig in der öffentlichen API der Kiste verwendet wird, ist es auch sinnvoll, dass die Abhängigen Zugriff darauf haben. Es wird jedoch erwartet, dass Sie die Abhängigkeit in Ihrem eigenen Projekt hinzufügen, während Sie darauf achten, eine kompatible Version beizubehalten. Andernfalls könnte die Fracht doppelte Abhängigkeiten aufbauen.

%Vor%

Um dies zu vermeiden, würde pathfinding vom Export seines eigenen num_traits profitieren (siehe unten). PR # 6 wurde zu diesem Zweck erstellt und in Version 0.1.12 zusammengeführt (danke, @SamuelTardieu) .

%Vor%

Damit können Sie nun genau das tun, was am Ende Ihrer Frage steht:

%Vor%     
E_net4 03.07.2017, 14:04
quelle

Tags und Links