1

私はYojsonライブラリを使用しており、使用されるコンストラクターの1つは `Bool(バックティック付き)と呼ばれます。私は、バックティックで囲まれたテキストが異なる方法で解釈されるようにcamlp5が使用されているOCamlソースを使用しています(たとえば、テキストはOCamlデータ構造に変換されます)。

私が抱えている問題は、 `Boolが私のソースコードに表示されると、camlp5 / OCamlがバックティックを見て、それが引用の始まりであると考えて、エラーを引き起こしていることです。これが代わりに`BoolOCaml用語として解釈されることをどのように確認できますか?campl5の機能を一時的にオフにする方法はありますか?私が使用できるある種のエスケープ文字?

4

1 に答える 1

3

バッククォートの動作をオーバーライドする構文拡張を使用しているため、同じファイルで`Boolのようなポリモーフィックバリアントを使用することはできません。

最初に、構文拡張を変更して、バッククォートとは異なる文字を使用することをお勧めします。%%たとえば、どうしてですか?

もう1つの解決策は単純ですが、より冗長です。1つは構文拡張子を使用しないファイル、もう1つは構文拡張子を使用するファイルです。

最初のファイル(構文拡張子なし)では、Yojsonで使用されているものと同様の通常のバリアントと、ポリモーフィックバリアントとの間で変換する関数を使用してタイプを定義します。

type t = 
 | Bool of ...
 | ...

let to_yojson x = 
  match x with
   | Bool v -> `Bool v
   | ...

let from_yojson x =
  match x with
   | `Bool v -> Bool v
   | ...

このようにして、バッククォートを使用せずに構文拡張を使用してコード内のこの新しいタイプを操作し、変換関数を使用してYojsonを呼び出すことができます。翻訳にはコストがかかりますが、それがあなたの場合であれば、構文拡張を変更することを選択する必要があります。

于 2012-02-19T17:09:28.197 に答える