2010-12-23 3 views
2
trait Ordered[A] extends java.lang.Comparable[A] { 
    def compare(that: A): Int 
    def < (that: A): Boolean = (this compare that) < 0 
    def > (that: A): Boolean = (this compare that) > 0 
    def <= (that: A): Boolean = (this compare that) <= 0 
    def >= (that: A): Boolean = (this compare that) >= 0 
    def compareTo(that: A): Int = compare(that) 
} 

Ist es nicht ein wenig nutzlos, beide compare und compareTo zu haben? Was ist der große Vorteil, der mir hier fehlt?Warum verwendet Ordered [A] eine Vergleichsmethode, anstatt compareTo erneut zu verwenden?

Wenn sie gerade compareTo verwendet hätten, hätte ich gerade Comparable durch Ordered in meinem Code ersetzen können und fertig sein.

+0

Ist vorbestellt vergleichbar bestellt? Das ist seltsam, aber mindestens eine Implementierung ruft die andere auf. –

+0

Nomenklatur. Es ist nur Scalas Art, sich von großem Java zu unterscheiden. –

Antwort

10

Ich denke, es ist ein historischer Unfall. Ordered erbte ursprünglich nicht von Comparable. Sobald dies der Fall war, wurde der Name compare bereits festgelegt.

+0

Ein guter Grund am Anfang, von Comparable nicht zu erben, wäre, dass Scala ursprünglich sowohl auf JVM als auch MSIL abzielte. –

+0

@Jean: Aber das stellt kein großes Problem, es ist das gleiche mit scala.Serializable. – soc

1

Ich nehme an, die Autoren der Scala-Bibliotheken bevorzugen nur den Namen compare().