このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

JSON改2

やっぱり多少の変更は必要だな、とはいっても互換の範囲でできる。

まずはコンベンションの追加:ドル記号からはじまるプロパティ名は特殊目的なので、ユーザーレベルでは使えない、とする。アプリケーションは、知らないドルマーク・プロパティが出てきたらそれはないものとして扱う。つまり、ドル記号ではじまるプロパティはアプリケーションからは見えないし、万が一見えても見てはいけない。

それで、"$case" をタイプタグを入れるフィールドとして使う。"$case" の値はstringまたはinteger。"$val"と一緒に使う。

  1. "$case" があれば、それはキー付きユニオン型のデータとみなす。
  2. "$val" があれば、"$val"の値を値として採用する。
  3. "$val" があるときは、"$val"以外のプロパティはすべて無視される。
  4. "$val" がないときは、"$case" を取り除いたオブジェクトを値とみなす。

スキーマ側の変更としては、単なるユニオン型は認めないで、キー付きユニオンだけを認める。union {...} という形で定義する。

テンプレート側でも、


{case}
{when foo} ...{endwhen}
{when bar} ...{endwhen}
{endcase}
とか入れたほうがいいかも。Erlang同様、選択肢からはみ出したら例外が起きる。たぶん、これで整合的だと思う。