2010-05-18 21 views
11

Ich suche nach etwas ähnlich wie JodaTime oder JSR 310 für Scala, das nette Scala-Funktionen wie Operatorüberladung nutzt und nicht auf impliziten Konvertierungen angewiesen ist (ich habe eine irrationale Angst vor impliziten Konvertierungen).Gibt es eine gute Datum/Zeit API für Scala?

Ich bin bewusst, http://github.com/jorgeortiz85/scala-time, aber es nur JodaTime mit implicits pimps.

+0

Suchen Sie etwas, das <, > Betreiber bietet? –

+4

Ich schlage vor, dass Sie Ihre irrationale Angst vor impliziten Konvertierungen loswerden. ;-) – Jesper

+0

@Timo - Ich möchte die Vergleichsoperationen zusammen mit Dingen wie + und minus. @Jesper - Die Angst ist nicht völlig irrational. Implizite haben einen Leistungseinbruch. Sie können seltsame Interaktionen mit Dingen wie Gleichheit hervorrufen. Sie beruhen auf Typinferenz, und ich habe festgestellt, dass das Mischen vieler Dinge, die auf Typinferenz beruhen, ein gutes Rezept für absolute Verwirrung ist. –

Antwort

3

Mit impliziten Konvertierungen ist nichts falsch. Selbst wenn für die zugrundeliegende Logik keine Java-Bibliothek verwendet wurde, würde jede vernünftig entworfene reine Scala-Bibliothek immer noch implicits verwenden, so dass Sie Ausdrücke wie 5.days + 3.minutes schreiben können.

Nicht alle implicits werden auch gleich erstellt, eine implizite Konvertierung in einen ganz bestimmten Typ, über den Sie die volle Kontrolle haben, ist fast sicher sicher.

Wie andere schon gesagt haben, werden solche Konvertierungen in den meisten Fällen weg optimiert, besonders wenn die Escape-Analyse eingeschaltet ist, also lassen Sie sich nicht von ihnen beunruhigen!

Bis JSR 310 fertiggestellt ist, ist joda-time das Beste, was Sie bekommen werden.

Abgesehen von der Notwendigkeit, den Java-Namenskonventionen zu folgen und eine Überlastung des Operators zu vermeiden, passt joda-time bereits sehr gut zu idiomatic Scala. Das Design ist sehr funktional in der Natur, vor allem die Art und Weise, wie es Unwandelbarkeit umfasst, so dass Scalaj-Zeit eigentlich nur eine sehr dünne Hülle um die Bibliothek ist.

Sie erhalten auch den Vorteil, dass scalaj-time einfach auf die Verwendung von JSR 310 aktualisiert werden kann, wenn es verfügbar ist, so dass es viel weniger schmerzhaft ist, Ihren Code zu diesem Zeitpunkt zu migrieren.

Seit 2.8, scala-Zeit scalaj Zeit umbenannt wurde: http://github.com/scalaj/scalaj-time

+1

Ich kann mir vorstellen, dass der Wechsel von Scalas JodaTime-Wrapper zu Scalas JSR310-Wrapper viel weniger Schmerzen bereitet als die Verwendung dieser Dinge direkt (oder in Java). Würde Spaß machen, wenn das Ändern des Exports und das Korrigieren einiger Klassennamen genug wären :-) – soc

+0

Implizite Konvertierungen fügen eine halbverdeckte Ebene der Indirektion hinzu, über die das Wrapping hinausgeht. Dies erhöht sowohl die Komplexität als auch den Laufzeitaufwand. Es ist nichts falsch mit ihnen als ein Merkmal, aber gelegentlich werden sie unentgeltlich verwendet. –

+0

Ist es überflüssig, eine nackte ganze Zahl in eine Anzahl von Minuten zu konvertieren? –

Verwandte Themen