Как я могу проверить существование функции в Dart?

Есть ли способ проверить существование функции или метода в Dart, не пытаясь вызвать его и поймать ошибку NoSuchMethodError? Я ищу что-то вроде

if (exists("func_name")){...}

чтобы проверить, существует ли функция namedfunc_name. Заранее спасибо!


person George Flourentzos    schedule 21.12.2012    source источник


Ответы (1)


Вы можете сделать это с помощью API зеркал:

import 'dart:mirrors';

class Test {
  method1() => "hello";
}

main() {
  print(existsFunction("main")); // true
  print(existsFunction("main1")); // false
  print(existsMethodOnObject(new Test(), "method1")); // true
  print(existsMethodOnObject(new Test(), "method2")); // false
}

bool existsFunction(String functionName) => currentMirrorSystem().isolate
    .rootLibrary.functions.containsKey(functionName);

bool existsMethodOnObject(Object o, String method) => reflect(o).type.methods
    .containsKey(method);

existsFunction только проверяет, существует ли функция с functionName в текущей библиотеке. Таким образом, с функциями, доступными оператором import, оператор existsFunction вернет false.

person Alexandre Ardhuin    schedule 21.12.2012