14

PHPでの動的クラスメソッド呼び出しの質問のように、これをDartで実行したいと思います。

var = "name";
page.${var} = value;
page.save();

それは可能ですか?

4

3 に答える 3

16

ミラーで達成できることがいくつかあります。

クラスの値を設定する方法とメソッドを動的に呼び出す方法の例を次に示します。

import 'dart:mirrors';

class Page {
  var name;

  method() {
    print('called!');
  }
}

void main() {
  var page = new Page();

  var im = reflect(page);

  // Set values.
  im.setField("name", "some value").then((temp) => print(page.name));

  // Call methods.
  im.invoke("method", []);
}

ご参考までに、imは、基本的にインスタンスInstanceMirrorを反映するです。page

別の質問もあります。Dartのクラスでメソッドを動的に呼び出したり、インスタンス変数を設定したりする方法はありますか?

于 2012-11-08T17:40:50.477 に答える
7

DartMirrorAPIを使用してそのようなことを行うことができます。ミラーAPIは現在完全には実装されていませんが、次のように機能します。

import 'dart:mirrors';

class Page {
  String name;
}

main() {
  final page = new Page();
  var value = "value";

  InstanceMirror im = reflect(page);
  im.setField("name", value).then((_){
    print(page.name); // display "value"
  });
}
于 2012-11-08T17:23:23.323 に答える
3

Serializableを使用できます

例えば:

import 'package:serializable/serializable.dart';

@serializable
class Page extends _$PageSerializable {
  String name;
}

main() {
  final page = new Page();
  var attribute = "name";
  var value = "value";

  page["name"] = value;
  page[attribute] = value;

  print("page.name: ${page['name']}");
}
于 2018-02-06T18:03:49.207 に答える