トップレベルでは、次の出力が得られます。
#`B
- : [> `B ] = `B
では、 `Bはどういう意味ですか?なぜそれが必要なのですか?
心から!
likeのようなバッククォートが前に付いた識別子は、ポリモーフィックバリアント`B
型のコンストラクターです。これは、代数型のコンストラクターに似ています。
type abc = A | B | C
ただし、ポリモーフィックバリアント値は、宣言せずに使用できます。一般に、通常の代数型よりもはるかに柔軟性があります。トレードオフは、それらを使用するのもかなり難しいということです。
人々がそれらを使用する1つのことは、Cの値のような単純な名前付きの値、enum
またはより正確には、Lispのアトムのようなものです。これには通常の代数型を使用できますが、それらの定義を注意深く維持し、重複を防ぐ必要があります。多形バリアントでは、これらのいずれかを実行する必要はありません。宣言せずに使用でき、コンストラクターは一意である必要はありません(2つの異なるタイプが同じコンストラクターを持つことができます)。
代数コンストラクターと同様に、ポリモーフィックバリアントコンストラクターもパラメーターを受け取ることができます。したがって、単一のパラメーター(`B 77)
を持つコンストラクターを作成することもできます。int
これはかなり大きなトピックです。詳細については、OCamlマニュアルの上記のリンクされたセクションを参照してください。
これはポリモーフィックなバリアントです。ドキュメントから:
セクション1.4に示されているバリアントは、データ構造とアルゴリズムを構築するための強力なツールです。ただし、モジュラープログラミングで使用する場合は柔軟性が不足することがあります。これは、すべてのコンストラクターが一意の型で使用される名前を予約しているためです。別の型で同じ名前を使用したり、ある型の値を、より多くのコンストラクターを持つ別の型に属すると見なしたりすることはできません。
多形バリアントでは、この元の仮定は削除されます。つまり、バリアントタグは特定のタイプに属していないため、型システムはその用途に応じて許容値であることを確認するだけです。バリアントタグを使用する前にタイプを定義する必要はありません。バリアントタイプは、その用途ごとに個別に推測されます。