@在Dart计划中做什么?

时间:2014-05-05 15:58:30

标签: dart metadata

我花了20个小时来学习Dart语言的基础知识,但是当我在开源Dart程序中找到@前缀时,我发现here大多数程序都使用,我想知道@指令在这些程序中的作用......

有关您的信息,the official documentation says the following

元数据 使用元数据提供有关代码的其他信息。元数据注释以字符@开头,后跟对编译时常量的引用(例如不推荐使用)或对常量构造函数的调用。 所有Dart代码都有三个注释:@ deprecated,@ override和@proxy。有关使用@override和@proxy的示例,请参阅“扩展类”一节。以下是使用@deprecated注释的示例:

然而,"附加信息" @指令是否会添加到代码中?如果通过编写以下构造函数

来创建实例
@todo('seth', 'make this do something')

,而不是以下构造函数,它是默认值:

todo('seth", 'make this do something')

,我可以从第一个构造函数中获得什么好处?

我已经知道使用内置元数据(例如@deprecated@override)可以让我在运行应用时受到警告,但我可以从案例中获得什么在自定义@todo上,或上述链接的示例代码通过Github?

2 个答案:

答案 0 :(得分:3)

可以通过dart:mirrors库访问注释。您可以在需要提供有关类,方法等的其他信息时使用自定义注释。例如,@MirrorsUsed用于为dart2js编译器提供额外信息以优化生成的JavaScript的大小。

对于框架或库作者而言,注释通常比应用程序作者更有用。例如,如果您在Dart中创建REST服务器框架,则可以使用注释将方法转换为Web资源。例如,它可能类似于以下内容(假设您已创建@GET注释):

@GET('/users/')
List<User> getUsers() {
 // ...
}

然后,您可以让您的框架在服务器启动时使用镜像扫描您的代码,以使用@GET注释查找所有方法,并将该方法绑定到注释中指定的URL。

答案 1 :(得分:2)

你可以做一些推理&#39;关于代码。 您可以查询具有特定注释的fields / methods / classes / libraries / .... 您使用反射获取这些代码部分。在Dart反射是由'dart:mirrors&#39;完成的。封装

您可以在此处找到代码示例:How to retrieve metadata in Dartlang?

定期使用注释的示例是序列化或数据库持久性,您可以将metatdata添加到类中,该类可以通过序列化/持久性框架用作配置设置,以了解如何处理字段或方法。

例如,您添加@Entity()注释以指示应该保留此类。 在应该保留的每个字段上,添加另一个注释,如@Column()。 许多持久性框架从此元数据自动生成数据库表。 为此,他们需要更多信息,因此您在应该用作主键的字段上添加@Id(),并在@Column(name: 'first_name', type: 'varchar', length: 32)中添加数据库表和列的参数。 这只是一个例子。限制是你的想象力。