Symbol 构造函数

const Symbol(
  1. String name
)

构建一个新的 Symbol,表示提供的名称。

从相同的 name 字符串创建的符号是相等的。如果使用 const 创建符号,具有相同 name 字符串的符号将被规范化并相同。

一些 name 字符串可以创建符号,这些符号也可以使用符号字面量创建,或者在运行 Dart 程序时隐式创建,例如通过 Object.noSuchMethod

如果 name 是一个不以下划线开头的单个 Dart 标识符,或者它是一个限定标识符(多个标识符由 . 分隔),或者它是用户定义的运算符的名称(不同于 unary-,即 "+", "-", "*", "/", "%", "~/", "&", "|", "^", "~", "<<", ">>", ">>>", "<", "<=", ">", ">=", "==", "[]" 或 "[]="),则 Symbol(name) 的结果是等于在 name 内容前加 # 创建的符号字面量,并且 const Symbol(name) 与该符号字面量相同。即 #foo == Symbol("foo")identical(#foo, const Symbol("foo"))

如果 name 是一个不以下划线开头的单个标识符后跟一个 =,则该符号是设置器名称,并且可以等于 Invocation.memberName 在一个 Object.noSuchMethod 调用中。

私有符号字面量,如 #_foo,不能使用符号构造函数创建。类似于 const Symbol("_foo") 的符号不等于任何符号字面量,也不等于任何由 noSuchMethod 引入的源名称符号。

assert(Symbol("foo") == Symbol("foo"));
assert(Symbol("foo") == #foo);
assert(identical(const Symbol("foo"), const Symbol("foo")));
assert(identical(const Symbol("foo"), #foo));
assert(Symbol("[]=") == #[]=);
assert(identical(const Symbol("[]="), #[]=));
assert(Symbol("foo.bar") == #foo.bar);
assert(identical(const Symbol("foo.bar"), #foo.bar));

创建的实例覆盖了 Object.==

实现

const factory Symbol(String name) = internal.Symbol;