blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

DartでObjectをdumpする

リフレクションを使う

リフレクションを使ってDartのオブジェクトをhtmlのtable形式でdocumen.bodyに追加します。 使い方はdumpobjにインスタンスを入れるだけです。

code

@MirrorsUsed(override: '*')
import 'dart:mirrors';
import 'dart:html';

Map<Symbol, String> o2m(Object obj) {
  InstanceMirror ins = reflect(obj);
  ClassMirror cls = ins.type;
  Map<Symbol, String> ret = new Map<Symbol, String>();
  for (var m in cls.declarations.keys) {
    try {
      ret[m] = ins.getField(m).toString();
    } catch (e) {
      ret[m] = e.toString();
    }
  }
  return ret;
}

TableElement m2t(Map m) {
  TableElement table = new TableElement();
  for (var k in m.keys) {
    table.append((new TableRowElement())
        ..append(new TableCellElement()..text = k.toString())
        ..append(new TableCellElement()..text = m[k].toString()));
  }
  return table;
}

TableElement dumpobj(Object obj) => m2t(o2m(obj));

void main() {
  DateTime now = new DateTime.now();
  document.body.append(dumpobj(now))
}