2010-02-16 11 views
7

Wie wird ein Untertyp von Numeric [T] implementiert? Ich habe nach einer Anleitung gesucht, aber keine gefunden. Beispiel für Subtypen könnte Rational oder Komplex sein?Scala: Implementieren eines Untertyps von Numeric [T]

Vielen Dank im Voraus Troels

+0

zu machen, sind Sie eine Instanz von Numeric für ein bestimmtes T, zu schaffen versuchen (z ComplexNumeric) oder eine allgemeinere numerischen Typ (z Echt [T])? – retronym

+0

Nun, ich denke, was ich will, ist eine Instanz von Numeric. Mein großes Problem ist, dass ich keine Anleitung gefunden habe, wie ich vom neuen Typ Numeric [T] profitieren kann. Gibt es einen solchen Leitfaden? –

Antwort

16

ein absolut nutzlos String Numerisch:

trait StringIsNumeric extends Numeric[String] { 
    def plus(x: String, y: String): String = "%s+%s" format (x, y) 
    def minus(x: String, y: String): String = "%s-%s" format (x) 
    def times(x: String, y: String): String = "%s*%s" format (x, y) 
    def quot(x: String, y: String): String = "%s/%s" format (x, y) 
    def rem(x: String, y: String): String = "%s%%s" format (x, y) 
    def negate(x: String): String = "-%s" format (x) 
    def fromInt(x: Int): String = x.toString 
    def toInt(x: String): Int = 0 
    def toLong(x: String): Long = 0L 
    def toFloat(x: String): Float = 0.0f 
    def toDouble(x: String): Double = 0.0 
} 
implicit object StringIsNumeric extends StringIsNumeric with Ordering.StringOrdering 


def x[T: Numeric](t1 : T, t2 : T) = { 
    val n = implicitly[Numeric[T]] 
    import n._ 
    t1 * t2 
} 
scala> x("a","b") 
res0: java.lang.String = a*b 
1

habe ich Real zu Scalaz, mit Instanzen Real[Double] und Real[Dual].

Ich fand es bequem fromDouble implizite