8

オブジェクトがある場合、そのタイプをどのように判断できますか? instanceof(Javaの演算子に相当するOCamlはありますか?)

4

4 に答える 4

7

OCaml には、Java のような主格型付けではなく、オブジェクトの構造型付けがあります。したがって、オブジェクトの型は基本的にそのメソッドによって決定されます (そして決定されるだけです)。OCaml のオブジェクトは、クラスなどを介さずに直接作成できます。

引数オブジェクトが特定のメソッドを持っていること (およびそれらのメソッドが特定の型を持っていること) を必要とする関数を書くことができます。たとえば、次のメソッドは、メソッド「bar」を持つ任意のオブジェクトを引数に取ります。

let foo x = x#bar
于 2009-09-15T19:49:37.263 に答える
1

つまり、独自の RTTI メカニズムをエンコードする必要があります。OCaml は RTTI やアップ/ダウン キャストを提供しません (後者の理由の 1 つは、Java のように統一されているのではなく、OCaml では継承とサブタイプが直交しているためです)。

クラスやオブジェクトの型情報をエンコードするために、文字列またはポリモーフィック バリアントを使用して何かを行うことができます。LablGTK がこれの一部を行い、オブジェクトのタグ付けとアップ/ダウン キャストをサポートするユーティリティ ライブラリを提供していると思います。

于 2009-09-16T02:11:56.973 に答える
-1

やや話題から外れていますが、OPA 言語(OCaml のいくつかの側面から大きく引き出されている) では、オブジェクトのパターン マッチングと同等のことが可能です。なので十分実現可能です。

于 2010-01-16T10:48:13.183 に答える