Использовать символы для передачи имени члена класса?

#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); }