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
}
Вы действительно должны сказать гораздо больше о том, что вы пытаетесь достичь, и что именно вы пробовали. –
Это фактически дубликат http://stackoverflow.com/questions/485896/how-does-one-write-the-pythagoras-theorem-in-scala. –
Привет, спасибо за ваш ответ. Randall -I просто пытался сыграть с родовым типом и попытаться использовать оператор «+» над всем, что я передал функции, например string + string, int + int, double + double – 2010-01-21 10:00:15