我在 Flutter 包中偶然发现了以下代码片段:
zoneValues: <dynamic, dynamic>{#goldentoolkit.config: config},
Run Code Online (Sandbox Code Playgroud)
他们在 Dart 代码中使用哈希 (#) 。我以前从未见过这个,也不知道它的存在。
当我在 IDE 中测试使用它时:
#anyword;
Run Code Online (Sandbox Code Playgroud)
分析仪没有给我任何警告。
print(#test);
Run Code Online (Sandbox Code Playgroud)
这将打印,这意味着它是创建符号Symbol("test")的语法,但是,它有什么作用呢?
人们可能会问引入文字符号的动机是什么?在某些语言中,符号是规范化的,而字符串则不是。然而,文字字符串在 Dart 中已经被规范化。与字符串相比,符号的输入稍微容易一些,并且它们的使用可能会变得奇怪地让人上瘾,但这还不足以成为向语言添加文字形式的理由。主要动机与反射的使用和称为缩小的网络特定实践有关。
缩小在整个程序中一致地压缩标识符,以减少下载大小。这种做法给通过字符串引用程序声明的反射程序带来了困难。字符串将引用源中的标识符,但该标识符将不再在缩小代码中使用,并且使用这些标识符的反射代码将失败。因此,Dart 反射使用符号类型的对象
Symbol而不是字符串。保证的实例Symbol在缩小方面保持稳定。为符号提供文字形式使反射代码更易于阅读和编写。事实上,符号易于输入并且通常可以作为枚举的方便替代品,这是次要的好处。
| 归档时间: |
|
| 查看次数: |
755 次 |
| 最近记录: |