首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dart程序中,@是做什么的?

在Dart程序中,@是做什么的?
EN

Stack Overflow用户
提问于 2014-05-05 15:58:30
回答 2查看 1.5K关注 0票数 3

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

供您参考,官方文件显示

元数据使用元数据提供有关代码的其他信息。元数据注释以字符@开头,后面是对编译时常量(例如弃用)的引用,或者是对常量构造函数的调用。所有Dart代码都可以使用三个批注:@deprecated、@重写和@proxy。有关使用@重写和@proxy的示例,请参阅名为“Extending”一节。下面是一个使用@deprecated注释的示例:

但是,@指令在代码中添加了哪些“附加信息”?如果通过编写以下构造函数创建实例

代码语言:javascript
复制
@todo('seth', 'make this do something')

,而不是下面的构造函数,它是默认的:

代码语言:javascript
复制
todo('seth", 'make this do something')

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

我已经知道,使用内置元数据(如@deprecated@override )可以使我在运行应用程序时得到警告,但是我可以从定制@todo上的情况中获得什么,或者在Github上获得上述链接样例代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 16:22:13

你可以对代码做一些“推理”。可以查询字段/方法/类/库/.有一个特定的注释。您可以使用反射获取这些代码部件。在Dart中,反射是由“省道:镜子”包完成的。

您可以在这里找到一个代码示例:如何检索Dartlang中的元数据?

经常使用注释的一个示例是序列化或数据库持久性,您可以在类中添加元数据,这些数据可以被序列化/持久性框架用作配置设置,以了解如何处理字段或方法。

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

票数 2
EN

Stack Overflow用户

发布于 2014-05-05 16:24:57

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

注释对框架或库作者通常比应用程序作者更有用。例如,如果要在Dart中创建REST服务器框架,可以使用注释将方法转换为web资源。例如,它可能如下所示(假设您已经创建了@GET注释):

代码语言:javascript
复制
@GET('/users/')
List<User> getUsers() {
 // ...
}

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23476800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档