Widzę dużo kodu Rust gdzie sprawozdanie use
wyglądać następująco:Dlaczego firma Rust promuje instrukcje użycia z wyraźnym importem?
use std::io::net::ip::{SocketAddr, Ipv4Addr};
Sposób, w jaki się go ogranicza to stwierdzenie use
tylko importować SocketAddr
i Ipv4Addr
.
Patrząc z perspektywy języków, takich jak Java lub C#, wydaje się to dziwne, ponieważ w przypadku takich języków instrukcja importu zawsze importuje wszystkie typy publiczne.
Uznałem, że w Rust można użyć tego samego.
use std::io::net::ip::*;
Jedynym powodem widziałem do wyraźnego nazewnictwa byłoby uniknąć konfliktów, gdzie dwa różne import będzie zawierać API publicznych o tych samych nazwach. Można to jednak rozwiązać z aliasingiem, więc zastanawiam się, czy istnieje jeszcze jedna zaleta bardziej rygorystycznego podejścia "importuj tylko to, co jest potrzebne"?
Innym sposobem robienia rzeczy jest użycie 'std :: io :: net :: ip'. Następnie w swoich typach dostępu do kodu z 'ip :: SocketAddr'. Nie ryzykujesz kolizji przestrzeni nazw z importem globu przy zachowaniu krótkich typów. – luke
Myślę, że masz na myśli "import" wszędzie, gdzie piszesz "eksport" lub nie rozumiem twojego punktu widzenia. Edycja: Również w Javie masz 'import com.acme.dynamite.Stick', a także' import com.acme.dynamite. * ', Tylko preferencja jest przełączana. – delnan
Tak, masz rację. Moje sformułowanie było nieprawidłowe we wstępnym pytaniu. – Christoph