Dart中的动态类方法调用

时间:2012-11-08 16:32:26

标签: dart dart-mirrors

Dynamic class method invocation in PHP处的问题一样,我想在Dart中执行此操作。

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

这可能吗?

3 个答案:

答案 0 :(得分:10)

使用Mirrors可以实现一些目标。

以下是如何设置类的值以及如何动态调用方法的示例:

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", []);
}

如果您想知道,imInstanceMirror,它基本上反映了page个实例。

还有另一个问题:Is there a way to dynamically call a method or set an instance variable in a class in Dart?

答案 1 :(得分:6)

您可以使用Dart Mirror API来执行此类操作。镜像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"
  });
}

答案 2 :(得分:0)

您可以使用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']}");
}