Подтвердить что ты не робот

Какое имя этого синтаксиса Scala для указания параметров типа?

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

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

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

Есть ли имя для такого синтаксиса? Какой хороший вариант для этого?

4b9b3361

Ответ 1

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

Ответ 2

Вот пример из "Программирования Scala" (О'Рейли), стр. 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)
}

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