Что такое тип «Первый класс»?

Что значит для типа T быть типом «первого класса»?

Ответов (3)

Решение

Обычно это означает, что экземпляры T могут быть

  • возвращается из функций
  • переданы в функции
  • построен во время выполнения

Например, функции в C не являются типами первого класса, поскольку они не могут быть созданы во время выполнения, но они находятся в JavaScript.

В некоторых особых обстоятельствах, например при доказательстве теорем, это означает, что типы сами по себе являются объектами первого класса. В более современной литературе вместо этого используется термин «овеществленные типы», чтобы избежать такой двусмысленности.

Я думаю, что первоклассный тип - это то же самое, что и первоклассный объект . По сути, это тип, который предоставляет свойства первоклассного объекта.

Использование буквы «T» заставляет думать, что, возможно, кто-то говорил о состоянии дженериков в Java (они стираются, что означает, что, хотя вы можете проверить, является ли что-то списком во время выполнения, вы не можете проверить, является ли это списком Целое число).

Однако существуют также «типы первого класса», означающие, что сами типы (а не только их экземпляры) могут отображаться где угодно, например как значение выражения. Например, такие фрагменты кода, как

someType s = new someType();
new typeOf(s); // makes a new instance of someType

Но вы не часто видите это в дикой природе, поскольку, если ваши типы зависят от значения, проверка типов требует дополнительных вычислений, а если вы позволяете типам зависеть от любого значения, тогда проверка становится неразрешимой.