1
は、私はクラスのメソッドを作っている、と私は、このタイプを持っているしたいと思います:のOCaml - 間違った関数型
unit -> (dir -> 'b)
しかし、私の実際の方法:
method iter() = fun x -> match x with
| Up -> if (Stack.is_empty pz) then raise Stack.Empty else if (Stack.length pz = 1) then failwith "Cannot go up" else (ignore (Stack.pop pz) ; {< a = (Stack.top pz) >})
| Down(v) -> match (Stack.top pz) with
| Noeud(o, {contents = []}) -> raise Not_found
| Noeud(o, {contents = l}) -> if mem_assoc v l then ((Stack.push (assoc v l) pz) ; {< a = (Stack.top pz) >}) else raise Not_found
はタイプunit -> dir -> 'b
を持っています
どのようにして最初のタイプにすることができますか?ここで
は、カスタムタイプです:
type 'a arbre = Noeud of 'a option ref * (char * 'a arbre) list ref
type dir = Up | Down of char
編集:それは、特定のインターフェイスに準拠することができ、かつ型の不一致により、それがコンパイルされませんので、私はこれを必要とします。 ありがとう!
実際にはエラーメッセージは表示されません。コンパイルは正常です。しかし、私はいくつかの事前に書かれたテストで私のコードを実行すると、他のfuntionsを見つけることはできません...私はこのメソッドのインターフェイスを変更しようとすると、それは正常に動作します。 – Pacane
「事前に書かれたテスト」や「他の機能が見つからない」という意味を理解していません。再度、実際のエラーメッセージと例が役立ちます。 :) – Ashe
結局のところ、それは動作していた、ちょうどインターフェイス名の型。あなたの助けをありがとう。 – Pacane