1

クラスメソッドを作成しましたが、次のタイプが必要です:

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

編集:特定のインターフェースに準拠できるようにするためにこれが必要であり、型の不一致のためにコンパイルされません。ありがとう!

4

1 に答える 1

6

これは問題ではありません。unit -> (dir -> 'b)unit -> dir -> 'bOCamlの同じタイプです!(タイプ矢印は右連想です)

問題がどこにあるかを知るために、実際のエラーメッセージを表示していただけますか?

補遺:実際にこれを試しましたか?他に問題がなければ、問題なく動作することがわかります。

于 2012-04-26T03:27:36.627 に答える