今天俺跟大家一起来学习Dart中Symbol,欢迎大家一起讨论。
Dart中的符号是不透明,动态字符串名称( opaque, dynamic string name),通常用来反映库中的元数据。换句话说,Symbol是存储人类可读字符串与方便计算机优化使用的字符串之间关系的一种方法。
反射(Reflection)是一种在运行时获取类型元数据的机制,如类中的方法数,它具有的构造函数数或函数中的参数数。 您甚至可以调用在运行时加载的类型的方法。
在Dart反射中,dart:mirrors包中提供了特定的类。 此库适用于Web应用程序和命令行应用程序。
语法
Symbol obj = new Symbol('name'); // 期望反映类或函数或库的名称
该name必须是有效的公共Dart成员名称,公共构造函数名称或库名称。
例子
请考虑以下代码。 代码在库foo_lib中声明了一个类Foo。 该类定义了方法m1,m2和m3。
Foo.dart
library foo_lib; // libarary name can be a symbol class Foo { // class name can be a symbol m1() { // method name can be a symbol print("Inside m1"); } m2() { print("Inside m2"); } m3() { print("Inside m3"); } }
以下代码在Symbol类型的帮助下加载Foo.dart库并搜索Foo类。 由于我们反射了上述库中的元数据,因此代码导入了dart:mirrors库。
将Symbol转换为字符串
您可以使用MirrorSystem类将存储在symbol中的类或类的名称转换回字符串。 以下代码显示如何将symbol转换为字符串。
import 'dart:mirrors'; void main(){ Symbol lib = new Symbol("foo_lib"); String name_of_lib = MirrorSystem.getName(lib); print(lib); print(name_of_lib); }
上面的代码将会输出以下结果:
Symbol("foo_lib") foo_lib