В языке Verse есть специальный тип any
, который является супертипом для всех типов (при этом все остальные типы являются подтипами any
). Таким образом, any
поддерживает ограниченное количество операций, поскольку все остальные типы должны предоставлять тот же функционал, что и any
.
Например, если бы any
определял операцию сравнения (чего он не делает), то все остальные типы тоже должны были бы определять операцию сравнения (чего они не делают).
Возможности работы с типом any
ограничены, но об этом типе полезно знать, поскольку он может встретиться при написании кода, который выдаёт ошибку.
Тем не менее тип any
можно использовать в некоторых случаях:
Letters := enum:
A
B
C
letter := class:
Value : char
Main(Arg : int) : void =
X := if (Arg > 0)
Letters.A
else
letter{Value := 'D'}
В приведённом выше примере переменной X
присвоен тип any
, поскольку это наименьший общий супертип для Letters
и letter
.
Более того, any
можно использовать в качестве типа параметра функции, которая игнорируется (но может потребоваться в качестве аргумента метода реализованного интерфейса).
Например:
FirstInt(X:int, :any) : int = X
Второй аргумент FirstInt
игнорируется и может иметь тип any
, поэтому ему присваивается тип any
. Функцию FirstInt
можно записать в более общем виде с помощью параметрических типов. Например:
First(X:t, :any where t:type) : t = X