2010-07-08 11 views

Odpowiedz

3

Oto przykład z "Programowania Scali" (O'Reilly), strona 158 w rozdziale 7, "System obiektów Scala", który dostosowaliśmy z bloga Daniela Scobrala (http://dcsobral.blogspot. Com/2009/06/catch-exceptions .html):

// code-examples/ObjectSystem/typehierarchy/either-script.scala 
def exceptionToLeft[T](f: => T): Either[java.lang.Throwable, T] = try { Right(f) 
} catch { 
} 
case ex => Left(ex) 
def throwsOnOddInt(i: Int) = i % 2 match { case 0 => i 
} 
case 1 => throw new RuntimeException(i + " is odd!") 
for(i <- 0 to 3) exceptionToLeft(throwsOnOddInt(i)) match { 
} 
case Left(ex) => println("exception: " + ex.toString) case Right(x) => println(x) 

Albo jest wbudowany typ i ten idiom jest powszechne w niektórych językach funkcjonalnych jako alternatywa dla rzuca wyjątek. Zauważ, że Lewy i Prawy są podtypami Albo. Osobiście chciałbym, aby typ był nazywany "Or", więc możesz napisać "Throwable Or T".

+1

Aha, a przy okazji, termin "infiks" jest używany dla tych typów. –

10

To po prostu aplikacja typu binarnego typu binarnego. Podobnie jak w przypadku aplikacji typu infix, jest ona częściej używana, gdy nazwa konstruktora lub metody typu zawiera znaki interpunkcyjne. Przykłady w bibliotece 2.8 obejmują <:<, <%< i =:= (patrz scala.Predef).

Powiązane problemy