飞镖符号文字

时间:2019-12-04 22:46:29

标签: dart

我正在阅读this关于区域的文档,它具有以下代码:

runZoned(() {
  print(Zone.current[#key]);
}, zoneValues: { #key: 499 });

我试图找到更多的文档符号文字,但我找不到,它们非常稀缺。

我输入了以下代码进行测试:

var a = #b;

我可以看到aSymbol

Symbol文字如何工作?

它指的是什么?

仅通过创建一个就创建一个新的唯一Symbol吗?

1 个答案:

答案 0 :(得分:2)

符号不是唯一的。它们旨在表示运行时的源名称,因此符号文字#a(也可以写为const Symbol("a"))的符号值表示标识符a

符号仅出现在Dart的动态部分中。特别是,它们被用于Invocation类(传递给noSuchMethod的参数)和Function.apply函数所使用的命名参数的表示中。如果您的平台有权访问dart:mirrors,那么它们也将在此处使用,这就是它们最初引入的用途。

在这些情况下,您不应该使用,但是在某些情况下,例如上面的#key,这只是简单的一种提供带有自己名称的可复制(非唯一)令牌。或者,如果您想要自己的库独有的令牌,则可以为私有名称#_foo制作符号。这代表了图书馆专用的_foo标识符,其他任何图书馆都无法复制。

具有不是字符串的源名称表示形式,例如,Dart to JavaScript编译器可以最小化名称,而不必在部署的代码中保留更长的源标识符。

相关问题