Дополнение с параметром универсального типа в Scala
Привет, я новичок в Scala и пытаюсь написать дополнение программы с параметром универсального типа, как показано ниже
object GenericTest extends Application {
def func1[A](x:A,y:A) :A = x+y
println(func1(3,4))
}
Но это не работает. Какую ошибку я делаю.
2 ответа
Решение
A
может быть любого типа в этом случае. x + y
средства x.+(y)
, который будет компилироваться только если а) тип A
был метод +
или б) тип 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
}
Перейти к Scala: Как определить "общие" параметры функции? за то, что вы хотите.