4

Dart クラス コンストラクターを使用して、次のようなことができるようにしたいと考えています。

class Model {

  // ... setting instance variables

  Model(Map fields) {
    fields.forEach((k,v) => this[k] = v);
  }

}

thisメソッドがないため、明らかにこれは機能しません[]=

それを機能させる方法はありますか、それとも単に物事を行うための「ダーツな方法」ではありませんか? そうでない場合、これに取り組む正しい方法を教えていただけますか?

4

2 に答える 2

8

ミラーを使用できます:

InstanceMirror im = reflect(theClassInstance);

im.invoke('methodName', ['param 1', 2, 'foo']).then((InstanceMirror value) {
  print(value.reflectee); // This is the return value of the method invocation.
});

したがって、あなたの場合、これを行うことができます(セッターがあるため):

import 'dart:mirrors';

class Model {
  Model(Map fields) {
    InstanceMirror im = reflect(this);
    fields.forEach((k, v) => im.setField(k, v)); // or just fields.forEach(im.setField);
  }
}

のドキュメントがInstanceMirror役立つ場合があります。

于 2012-10-31T19:16:11.153 に答える
1

現在No. このようなことが (できれば) 可能になる前に、リフレクションが Dart に到着するのを待つ必要があります。それまでは、おそらくコンストラクターで行うのが最善の策です。または、マップから直接初期化できるJsonObjectのようなものを使用することもできます (これがどのように機能するかの説明については、このブログ投稿を確認してください)。

于 2012-05-10T03:18:00.707 に答える