我正在阅读 this关于 Zones 的文档,它有以下代码:
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
,这只是一个简单的 em> 提供带有自己名称的可复制(非唯一) token 的方法。或者,如果您想要一个对您自己的库唯一的标记,您可以为一个私有(private) 名称创建一个符号,#_foo
。这表示库私有(private)的 _foo
标识符,其他库无法复制。
使用不是字符串的源名称表示允许,例如,Dart 到 JavaScript 编译器缩小名称,而不必在部署的代码中保留较长的源标识符。
关于Dart 符号文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59185676/