Ключевое слово forSome
используется для определения экзистенциальных типов в Scala. Есть эта страница Scala глоссарий , объясняющая, что они из себя представляют. Я не смог найти места в документах Scala, где они подробно объясняются, поэтому здесь - это статья в блоге, которую я нашел в Google и объясняющая, насколько они полезны.
Обновление: точное определение экзистенциальных типов можно найти в спецификации Scala , но оно довольно плотное.
Подводя итог некоторым постам, на которые я ссылался, экзистенциальные типы полезны, когда вы хотите оперировать чем-то, но не заботитесь о деталях типа в нем. Например, вы хотите работать с массивами, но все равно какого типа массива:
def printFirst(x : Array[T] forSome {type T}) = println(x(0))
, что вы также можете сделать с переменной типа в методе:
def printFirst[T](x : Array[T]) = println(x(0))
но вы можете не захотеть добавлять переменную типа в некоторых случаях. Вы также можете добавить границу к переменной типа:
def addToFirst(x : Array[T] forSome {type T <: Integer}) = x(0) + 1
Также см. это сообщение в блоге , откуда я взял этот пример.