我刚刚花了20个小时来学习Dart语言的基础知识,但是当我在一个开源的Dart程序中找到@前缀时,比如这里,我发现大多数程序都使用它,我想知道@指令在这些程序中做什么.
供您参考,官方文件显示
元数据使用元数据提供有关代码的其他信息。元数据注释以字符@开头,后面是对编译时常量(例如弃用)的引用,或者是对常量构造函数的调用。所有Dart代码都可以使用三个批注:@deprecated、@重写和@proxy。有关使用@重写和@proxy的示例,请参阅名为“Extending”一节。下面是一个使用@deprecated注释的示例:
但是,@指令在代码中添加了哪些“附加信息”?如果通过编写以下构造函数创建实例
@todo('seth', 'make this do something'),而不是下面的构造函数,它是默认的:
todo('seth", 'make this do something'),我可以从第一个构造函数中获得什么好处?
我已经知道,使用内置元数据(如@deprecated和@override )可以使我在运行应用程序时得到警告,但是我可以从定制@todo上的情况中获得什么,或者在Github上获得上述链接样例代码?
发布于 2014-05-05 16:22:13
你可以对代码做一些“推理”。可以查询字段/方法/类/库/.有一个特定的注释。您可以使用反射获取这些代码部件。在Dart中,反射是由“省道:镜子”包完成的。
您可以在这里找到一个代码示例:如何检索Dartlang中的元数据?
经常使用注释的一个示例是序列化或数据库持久性,您可以在类中添加元数据,这些数据可以被序列化/持久性框架用作配置设置,以了解如何处理字段或方法。
例如,您添加了一个@Entity()注释,以指示应该持久化这个类。在每个应该持久化的字段上,添加另一个注释,如@Column()。许多持久性框架都会根据这些元数据自动生成数据库表。为此,他们需要更多信息,因此您需要在字段中添加一个@Id(),该字段应该用作主键和@Column(name: 'first_name', type: 'varchar', length: 32)来定义数据库表和列的参数。这只是一个例子。极限在于你的想象力。
发布于 2014-05-05 16:24:57
注释可以通过dart:镜子库访问。您可以在需要提供有关类、方法等的附加信息时使用自定义注释。例如,@MirrorsUsed用于向dart2js编译器提供额外信息,以优化生成的JavaScript的大小。
注释对框架或库作者通常比应用程序作者更有用。例如,如果要在Dart中创建REST服务器框架,可以使用注释将方法转换为web资源。例如,它可能如下所示(假设您已经创建了@GET注释):
@GET('/users/')
List<User> getUsers() {
// ...
}然后,您可以让框架在服务器启动时使用镜像扫描代码,查找所有带有@GET注释的方法,并将该方法绑定到注释中指定的URL。
https://stackoverflow.com/questions/23476800
复制相似问题