Scala: Implementing a subtype of Numeric[T]

后端 未结 2 1103
野性不改
野性不改 2021-02-03 14:32

How does one go about implementing a subtype of Numeric[T]? I have been looking for at guide on this but haven\'t found any. Example of subtypes could be Rational or Complex?

相关标签:
2条回答
  • 2021-02-03 14:37

    An absolutely useless String Numeric:

    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
    
    0 讨论(0)
  • 2021-02-03 14:53

    I added Real to Scalaz, with instances Real[Double] and Real[Dual].

    I found it convenient to make fromDouble implicit

    0 讨论(0)
提交回复
热议问题