2010-07-08 5 views
13

Я заметил этот интересный синтаксис на днях для указания параметров типа для класса Scala.Как называется этот синтаксис синтаксиса Scala для указания параметров типа?

scala> class X[T, U] 
defined class X 

scala> new (Int X Int) 
res1: X[Int,Int] = [email protected] 

Есть ли название для такого синтаксиса? Что для этого полезно?

ответ

3

Вот пример из «Программирование Scala» (O'Reilly), стр. 158 в главе 7 «Система объектов Scala», которую мы адаптировали из блога Даниэля Скобраля (http://dcsobral.blogspot .com/2009/06/catching-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) 

Либо это встроенный тип и эта идиома распространена в некоторых функциональных языках в качестве альтернативы бросать исключение. Обратите внимание, что вы Left и Right являются подтипами. Лично мне хотелось бы, чтобы тип был назван «Or», поэтому вы могли написать «Throwable Or T».

+1

О, и, кстати, для этих типов используется термин «инфикс». –

10

Это просто инфиксное применение двоичного типа конструктора. Как и при инфиксном применении методов, это чаще используется, когда имя конструктора или метода типа содержит знаки пунктуации. Примеры в библиотеке 2.8 включают <:<, <%< и =:= (см. scala.Predef).

Смежные вопросы