#dart #symbols
Вопрос:
Я пишу функцию утилиты тестирования и хотел бы передать имя члена класса и получить его значение. Могу ли я использовать Symbol
s для этого? Мой тестовый код выглядит так
class Foo { String a = 'A'; String b = 'B'; static void output(Symbol symbol) { debugPrint("The value is '$symbol'"); } } Foo.output(#a);
Я пытаюсь получить такой результат, The value is 'A'
но я получаю The value is 'Symbol("a")'
?
Ответ №1:
Получение значения чего-либо по имени, где имя является значением, и во время выполнения это отражение. Вам это нужно dart:mirrors
, чего нет на большинстве платформ.
А еще лучше, не делайте этого вообще. Dart имеет функции первого класса, поэтому вместо этого вы можете передать функцию, обращающуюся к переменной:
class Foo { String a = 'A'; String b = 'B'; static void output(String read(Foo value)) { debugPrint("The value is '${read(this)}'"); } } void main() { var foo = Foo(); foo.output((f) =gt; f.a); foo.output((f) =gt; f.b); }