Каково ключевое слово forSome в Scala?

Я нашел следующий fragment кода:

List[T] forSome { type T } 

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

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

forSome слово 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 

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

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

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

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

  • Использование def, val и var в scala
  • Шаблон Loaner в Scala
  • В Scala есть оператор присваивания «=» вызов метода?
  • Разница между Iterator и Stream в Scala?
  • Как работает «scala.sys.process» от Scala 2.9?
  • Функции против методов в Scala
  • Вызовите по имени vs call по значению в Scala, необходимо разъяснение
  • Почему функции scala ограничены 22 параметрами?
  • Как перечислить все файлы в подкаталоге в scala?
  • Что такое расширение eta в Scala?
  • Что означает => и () => среднее значение в Scala
  • Interesting Posts

    Проблемы с использованием .cab с каждым установщиком

    Как динамически создавать элементы управления ASP.net в динамически созданных элементах управления ASP.net

    Структуры данных .NET: ArrayList, List, HashTable, Словарь, SortedList, SortedDictionary – Скорость, память и когда использовать их?

    java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver Исключение. Зачем?

    Объяснение сильного и слабого хранения в iOS5

    Жесткий диск исчезает после спящего режима

    Как называются конструкторы во время сериализации и десериализации?

    Поддерживает ли Android поддержку JDBC

    Как преобразовать struct System.Byte byte в объект System.IO.Stream в C #?

    Как извлечь данные компьютерной памяти, когда компьютеры заморожены

    Как использовать складывание кофейных байтов

    Путают $ locationChangeSuccess и $ stateChangeStart

    Прочитать пользовательский файл конфигурации на C # (Framework 4.0)

    Android: column ‘_id’ не существует

    .NET: Самый простой способ отправить POST с данными и прочитать ответ

    Давайте будем гением компьютера.