飞镖符号文字



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

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

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

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

var a = #b;

我可以看到a是一个Symbol.

Symbol文字如何工作?

它指的是什么?

只需创建一个,我就可以创建一个新的独特Symbol

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

符号只出现在 Dart 中更动态的部分。特别是它们用于表示Invocation类(传递给noSuchMethod的参数(和Function.apply函数使用的命名参数。如果您的平台可以访问dart:mirrors,它们也在那里使用,这就是引入它们的原始用途。

在这些情况之外,您不需要使用符号,但在某些情况下,如上面的#key,这只是提供带有自己名称的可重现(非唯一(令牌的简单方法。或者,如果您想要一个对您自己的库唯一的令牌,您可以为私有名称创建一个符号,#_foo.这表示库私有_foo标识符,其他库无法复制该标识符。

例如,具有非字符串的源名称表示允许Dart到JavaScript编译器缩小名称,而不必在部署的代码中保留较长的源标识符。

最新更新