2010-02-16 13 views
7

¿Cómo se puede implementar un subtipo de Numérico [T]? He estado buscando una guía sobre esto, pero no he encontrado ninguno. Ejemplo de subtipos podría ser racional o complejo?Scala: Implementando un subtipo de Numérico [T]

Gracias de antemano Troels

+0

¿Estás tratando de crear una instancia de numérico para un T específica, (por ejemplo ComplexNumeric), o un tipo numérico más general, (por ejemplo real [t])? – retronym

+0

Bueno, supongo que lo que quiero es una instancia de Numérico. Mi gran problema es que no he podido encontrar una documentación de guía sobre cómo beneficiarme del nuevo tipo de Numeric [T]. ¿Existe tal guía? –

Respuesta

16

Una cadena numérica absolutamente inútil:

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

que añaden Real a Scalaz, con instancias Real[Double] y Real[Dual].

que encontraron conveniente para hacer fromDouble implícita

Cuestiones relacionadas