D 始めました。 - bogoYAML

since: 2003-09-28 update: 2003-09-28 count:

bogoYAML は YAML をさらにシンプルにしたものです。 というか実装が面倒だったのでいい加減にやったものです。 bogoyaml.tar.bz2 (bogoYAML for D)

配列と連想配列と文字列限定のスカラが使えます。 あまり詳しくない定義は配布物の中の README をごらん下さい。 こんな YAML ファイルがあったとして、

--- # bogoYAML:0.1
-
        hoge: aaa
        fuga: bbb
-
        hoge: 1
        fuga: 2.3
        gefu: "hoge\nhoge
hoge"

こんなふうに処理します。

YamlHolder y = yamlLoad("test_simple.yml");
assert("aaa" == y.get(0).get("hoge").str);
assert("bbb" == y.get(0).get("fuga").str);
assert(1 == y.get(1).get("hoge").integer);
assert(2.3 == y.get(1).get("fuga").decimal);
assert("hoge\nhoge\nhoge" == y.get(1).get("gefu").str);

ごく普通の OO チックな処理。 これだけではつまらんですので、 今回のような型が確定している場合は (この場合は char[][char[]][])

alias char[][char[]][] Cfg;
instance ToStatic(Cfg) ToStaticCfg;
Cfg cfg = ToStaticCfg.conv(y);
assert("aaa" == cfg[0]["hoge"]);
assert("bbb" == cfg[0]["fuga"]);
assert("1" == cfg[1]["hoge"]);
assert("2.3" == cfg[1]["fuga"]);
assert("hoge\nhoge\nhoge" == cfg[1]["gefu"]);

なんていう使い方もできます。 これでちょっと驚いてくれると嬉しいな。 実装はテンプレートメタプログラミングな感じです。

面倒なので紹介しませんでしたが、 D のネイティブ型からの変換や、ファイルのダンプもできます。


home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h