0
ast.mlにおいて、構造は以下である:それは異なるパターンマッチがprint_fieldsrecに前記しかしOCamlのパターンマッチが
let rec print_bean fmt = function
| Bool -> put fmt "%s" "bool"
| Int -> put fmt "%s" "int"
| TLr f -> put fmt "%s" "{"; print_fieldsrec fmt f ; put fmt "%s" "}"
| TId id -> put fmt "%s" id
and print_fieldsrec fmt = function
| f :: fe -> print_field fmt f; put fmt "%s" "," ; print_fieldsrec fmt fe
and print_field fmt = function
| FIe (id, beantype) -> put fmt "%s" id; put fmt "%s" ":"; print_bean fmt beantype
:
printer.mlでtype beantype =
| Bool
| Int
| TLr of fieldsrec
| TId of ident
and fieldsrec = { fields : field list }
and field =
| FIe of (ident * beantype)
、iは下記のように使用します
Error: This pattern matches values of type 'a list
but a pattern was expected which matches values of type
Bean_ast.fieldsrec
私はどのようにprinter.mlを変更できますか?
'TLr'はリストではなく' fieldsrec'を保持します。たぶん、パターンを '| TLr {fields = f} 'である。 – RichN
私はあなたが正しいと試してみました –