Для чего используется ключевое слово forSome в Scala? - PullRequest
69 голосов
/ 25 февраля 2012

Я нашел следующий фрагмент кода:

List[T] forSome { type T }

forSome выглядит как метод, но мой друг сказал мне, что это ключевое слово.

Я гуглил, но нашел несколько документов о forSome. Что это значит, и где я могу получить некоторые документы об этом?

Ответы [ 2 ]

51 голосов
/ 25 февраля 2012

Ключевое слово 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

Также см. это сообщение в блоге , откуда я взял этот пример.

3 голосов
/ 25 февраля 2012

Я не знаю, Scala, но ваш вопрос поднял мой интерес и начал гуглить.

Я обнаружил, что в Изменения в Scala :

"Теперь можно определять экзистенциальные типы с помощью нового ключевого слова forSome. Экзистенциальный тип имеет форму T forSome {Q}, где Q - последовательность объявлений значений и / или типов. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...