A
может быть любого типа в этом случае.x + y
означает x.+(y)
, который компилируется только в том случае, если либо a) тип A
имеет метод +
, либо b) тип A
был неявно преобразован в тип с методом +
.
Тип scala.Numeric
предоставляет возможность писать код, который абстрагируется над числовой системой - его можно вызывать с помощью Double, Int или даже вашей собственной экзотической числовой системы, такой как комплексные числа.
Вы можете добавить неявный параметр к вашему методу типа Numeric[A]
.
object GenericTest extends Application {
def func1[A](x: A, y: A)(implicit n: Numeric[A]): A = x + y
}
В Scala 2.8 это можно сократить:
object GenericTest extends Application {
def func1[A: Numeric](x: A, y: A): A = x + y
}