飞镖符号文字

mFe*_*ein 1 dart

我正在阅读有关 Zones 的文档,其中包含以下代码:

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

Run Code Online (Sandbox Code Playgroud)

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

我键入此代码进行测试:

var a = #b;
Run Code Online (Sandbox Code Playgroud)

我可以看到这a是一个Symbol.

Symbol文字如何工作?

它指的是什么?

仅仅通过创造一个我就创造了一个新的独特的Symbol

lrn*_*lrn 5

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

符号只出现在 Dart 的动态部分。特别是它们用于表示类(传递给 的参数)和函数使用的命名参数。如果您的平台可以访问,它们也会在那里使用,这是它们最初的用途。InvocationnoSuchMethodFunction.applydart:mirrors

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

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