2010-01-19 3 views
3

Привет Я новичок в Скале и пытается написать программу сложения, с использованием универсального типа параметра, как показано нижеСложение с параметром универсального типа в Scala

object GenericTest extends Application { 
    def func1[A](x:A,y:A) :A = x+y  
    println(func1(3,4)) 
} 

Но это не работает .Что ошибки я делаю.

+0

Вы действительно должны сказать гораздо больше о том, что вы пытаетесь достичь, и что именно вы пробовали. –

+0

Это фактически дубликат http://stackoverflow.com/questions/485896/how-does-one-write-the-pythagoras-theorem-in-scala. –

+0

Привет, спасибо за ваш ответ. Randall -I просто пытался сыграть с родовым типом и попытаться использовать оператор «+» над всем, что я передал функции, например string + string, int + int, double + double – 2010-01-21 10:00:15

ответ

2

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  
} 
+0

Спасибо, это помогло много. Но я думаю, что у меня есть scala 2.7 на моей машине, которая не имеет scala.Numeric Class. – 2010-01-21 10:01:31

+0

Это новое дополнение в 2.8. http://harrah.github.com/browse/samples/library/scala/Numeric.scala.html – retronym