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

Что такое ключевое слово forSome в Scala для?

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

List[T] forSome { type T }

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

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

4b9b3361

Ответ 1

Ключевое слово forSome используется для определения экзистенциальных типов в Scala. На этой странице Scala glossary объясняется, что это такое. Я не мог найти место в документах 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

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

Ответ 2

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

Я обнаружил, что в Scala changelog:

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