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
の第 2 引数は無視され、any
型になります。つまり any
型が指定されたことになります。FirstInt
は パラメトリック型 を使用して一般に作成できます。次に例を示します。
First(X:t, :any where t:type) : t = X