Ich hatte normalerweise implizite Konvertierungen in einem Objekt, das deutlich signalisiert, dass das Importierte eine implizite Konvertierung ist.
Zum Beispiel, wenn ich eine Klasse com.foo.bar.FilthyRichString
habe, würden die impliziten Konvertierungen in com.foo.bar.implicit.FilthyRichStringImplicit
gehen. Ich weiß, die Namen sind etwas lang, aber deshalb haben wir IDEs (und die Scala-IDE-Unterstützung wird immer besser). Auf diese Weise finde ich es wichtig, dass alle impliziten Konvertierungen in einer 10-Sekunden-Codeprüfung deutlich sichtbar sind. Ich könnte den folgenden Code betrachten:
// andere Imports
import com.foo.bar.FilthyRichString
import com.foo.bar.util.Logger
import com.foo.bar.util.FileIO
import com.foo.bar.implicits.FilthyRichStringImplicit._
import com.foo.bar.implicits.MyListImplicit._
// andere Implizite
und auf einen Blick alle aktiven impliziten Konvertierungen in dieser Quelldatei sehen. Sie wären auch alle zusammengefasst, wenn Sie die Konvention verwenden, dass Importe nach Paketen gruppiert sind, mit einer neuen Zeile zwischen verschiedenen Paketen.
Entlang der gleichen Argumentation würde mir auch keine Sammelobjekt gefallen, das alle impliziten Konvertierungen enthält. In einem großen Projekt würden Sie wirklich alle impliziten Konvertierungen in all Ihren Quelldateien verwenden? Ich denke, dass dies eine sehr enge Kopplung zwischen verschiedenen Teilen Ihres Codes bedeutet.
Außerdem ist ein Sammelobjekt nicht für die Dokumentation sehr gut. Wenn Sie. Falls Sie alle verwendeten impliziten Konvertierungen in einer Datei explizit angeben, können Sie einfach Ihre Importanweisungen betrachten und sofort zur Dokumentation der impliziten Klasse springen. Bei einem Sammelobjekt müsste man das Objekt betrachten (was in einem großen Projekt riesig sein könnte) und dann nach der gewünschten impliziten Konvertierung suchen.
Ich stimme oxbow_lakes zu, dass das Vorhandensein impliziter Konvertierungen in trait
s schlecht ist, aufgrund der Versuchung, davon zu erben, was, wie er sagte, schlechte Praxis ist. Entlang dieser Linien würde ich die Objekte, die die impliziten Konvertierungen halten, grundsätzlich als final
markieren, um der Versuchung vollständig zu entgehen. Seine Idee, sie so nah wie möglich an die Verwendung heranzuführen, ist ebenfalls sehr schön, wenn implizite Konvertierungen im Code nur sparsam verwendet werden.
-- Flaviu Cipcigan