Symbol constructor
- String name
Constructs a new Symbol representing the provided name.
Symbols created from equal name strings are themselves equal.
If the symbols are created using const, symbols with the
same name strings are canonicalized and identical.
Some name strings create symbols which can also be created using
a symbol literal, or be implicitly created while running Dart programs,
for example through Object.noSuchMethod.
If name is a single Dart identifier
that does not start with an underscore,
or it is a qualified identifier (multiple identifiers separated by .s),
or it is the name of a user definable operator different from unary-
(one of "+", "-", "*", "/", "%", "~/", "&", "|",
"^", "~", "<<", ">>", ">>>", "<", "<=", ">", ">=",
"==", "[]", or "[]="),
then the result of Symbol(name) is equal to the symbol literal
created by prefixing # to the contents of name,
and const Symbol(name) is identical to that symbol literal.
That is #foo == Symbol("foo") and
identical(#foo, const Symbol("foo")).
If name is a single identifier that does not start with an underscore
followed by a =, then the symbol is a setter name, and can be equal
to the Invocation.memberName in an Object.noSuchMethod invocation.
Private symbol literals, like #_foo, cannot be created using the
symbol constructor.
A symbol like const Symbol("_foo") is not equal to any symbol literal,
or to any source name symbol introduced by 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));
The created instance overrides Object.==.
Implementation
const factory Symbol(String name) = internal.Symbol;