2010-02-16 23 views
7

Làm cách nào để thực hiện một loại phụ của số [T]? Tôi đã tìm kiếm hướng dẫn về điều này nhưng không tìm thấy bất kỳ. Ví dụ về các kiểu con có thể là Rational hoặc Complex?Scala: Thực hiện một kiểu con của số [T]

Cảm ơn trước Troels

+0

bạn đang cố gắng để tạo ra một thể hiện của Numeric cho một T cụ thể, (ví dụ ComplexNumeric), hoặc một số loại tổng quát hơn, (Ví dụ: Bất [T])? – retronym

+0

Vâng, tôi đoán những gì tôi muốn là một ví dụ của Numeric. Vấn đề lớn của tôi là tôi đã không thể tìm thấy tài liệu hướng dẫn về cách hưởng lợi từ loại Numeric [T] mới. Hướng dẫn này có tồn tại không? –

Trả lời

16

Một hoàn toàn vô dụng Chuỗi 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 
1

tôi thêm Real để Scalaz, với trường hợp Real[Double]Real[Dual].

tôi thấy nó thuận tiện để làm fromDouble ngầm

Các vấn đề liên quan