Я хочу создать символ, равный символу частного простейшего MethodMirror. Однако в документации Symbol указано, что аргумент нового Symbol должен быть действительным общедоступным идентификатором. Если я попытаюсь создать редактор dart const Symbol('_privateIdentifier')
, он сообщит мне, что оценка этого константного выражения вызовет исключение - хотя программа работает нормально, и я могу использовать ее без каких-либо проблем.Символ с аргументом частного идентификатора
void main(){
//error flagged in dart editor, though runs fine.
const s = const Symbol('_s');
print(s); //Symbol("_s");
}
Кажется, что в системе зеркала используются символы.
import 'dart:mirrors';
class ClassA{
_privateMethod(){}
}
void main(){
var classMirror = reflect(new ClassA()).type;
classMirror.declarations.keys.forEach(print);
//Symbol("_privateMethod"), Symbol("ClassA")
}
ли документация/ошибка маркировка в редакторе дротика унаследованной ошибки из-за устаревший анализатор дротика? Или планы по обеспечению соблюдения этого общественного требования в будущем? Есть ли другой способ создания уникального идентификационного символа, который будет уменьшен до того же символа, что и простое имя объявления?
Возможно ли иметь символьный литерал, который идентичен методу установки верхнего уровня? Из того, что я понимаю, символы setter всегда заканчиваются на «=», но он выглядит как # x = получает токенизацию в [#x, =]. – DomJack
Установщик 'Symbol' не может быть создан с использованием символьного литерала, но его можно создать с помощью' const Symbol ("x =") '. Это проблема http://dartbug.com/13640. Это несколько затрудняет создание частного символа сеттера, и, если он не обязательно должен быть константой, самый простой способ, вероятно, создать объект с 'noSuchMethod', который пропустит символ' Invocation.memberName'. – lrn