2013-06-10 12 views
5

W twitter Scala szkoła "Podstawy Ciąg dalszy" http://twitter.github.io/scala_school/basics2.html jest następujący obiekt definintionMylić przez "... rozciąga Function1 [Int, Int]"

object addOne extends Function1[Int, Int] { 
    def apply(m: Int): Int = m + 1 
} 

nie w pełni zrozumieć [Int, Parametryzacja typu Int. Kiedy rozszerzamy Function1, wierzę, że deklaruję, że będę miał zastosowanie, które przyjmuje jeden argument, Dlaczego 2. Int in Function1 [Int, Int] kiedy mój wniosek jest zbudowany, aby wziąć tylko jeden argument Int?

Proszę wyjaśnić.

+2

jako strony zauważyć można również napisać 'rozciąga (Int => int)' – 4lex1v

+0

Tak. Teraz to widzę. Ta składnia czyni magię bardziej przejrzystą. –

Odpowiedz

10

Jest to typ zwrotu. Function1[Int, Int] jest taki sam jak Int => Int. To zajmuje jedną Int i zwraca jedną Int.

Możemy napisać uproszczoną scala.Function1 takiego:

trait Function1[T1, R]{ 
    def apply(v1: T1): R 
} 
+0

+1 Chciałbym również zwrócić uwagę na to, że podpis do złożenia wniosku jest w rzeczywistości podejmowaniem argumentu Int (m) i zwrotem Int –

+0

Tak, edytowałem post. – Infinity

+0

Och, rozumiem. Funkcja2 [Int, Int, Double] byłaby def (v1: Int, v2: Int): Double i tak dalej. –