我正在阅读有关区域的文档,它有以下代码:
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编译器缩小名称,而不必在部署的代码中保留较长的源标识符。