【问题标题】:Dart meta programming featuresDart 元编程功能
【发布时间】:2014-05-20 11:50:51
【问题描述】:

dart 中是否会有 c# Reflection.Emit 命名空间的等价物?

Reflection.Emit 有许多类,用于在运行时构建类型并添加属性,配置它们的 getter 和 setter,以及在运行时构建方法和事件处理程序,这在元编程方面非常强大。

我的想法是在运行时生成我的数据模型并将它们缓存在地图中,这样我就可以在运行时创建实例并在需要时向它们添加新的方法和属性,而不必在生成后经常使用镜像类,这在编写 ORM 和更动态的应用程序时非常有用,在这些应用程序中使用一次反射而不是每次需要修改实例时都使用它

我的问题是:

  • 未来版本的 dart 会不会有这样的东西?他们提到 关于Mirror Builder 的东西,但我不确定是否也一样 事情,有人可以确认一下这是否是Mirror Builder 关于?
  • 另一个问题是,如果我能够在 服务器作为字符串,有没有办法在发送之前编译它们 将它们映射到客户端并将它们映射到 Map 并使用此 Map 创建实例?

【问题讨论】:

    标签: dart dart-mirrors


    【解决方案1】:

    我已经看到过一些讨论,认为这应该在某个时候得到支持,但据我所知,在不久的将来不会开始工作。

    类似的需求通常通过转换器在构建时(Polymer、Angular 等)生成代码来解决,转换器分析代码并生成用于反射属性访问的代码或 HTML 中的代码 sn-ps。

    Smoke 是一个旨在简化这一点的包。

    代码生成的优点是客户端需要下载的代码量要少得多。 当您在运行时进行代码生成时,您需要一个编译器,并且需要将大量代码下载到浏览器中。

    try.dartlang.org 采用了这样的方法。源代码在这里https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/site/try/。 它包括 dart2js(基于 JavaScript 构建)并运行将 Dart 代码编译为 JS 的后台隔离。

    【讨论】:

    • 非常感谢,这对现在非常有用,我现在无法抗拒在 dart 中从头开始构建所有东西,我从来没有这么喜欢一门语言
    • 没有问题,尽情享受吧:D 我只是指出了一些来源,以了解如何做到这一点。
    • smoke 现已停产...现在通过 Dart 团队自己的 reflectable 包支持相同类型的反射方法。
    • @Renato 你是对的,烟雾早已不复存在,未来的路可以反射。
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-02-01
    • 2022-11-23
    • 2015-01-27
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多