如何在Dart中测试函数的存在?

时间:2012-12-21 17:16:16

标签: dart dart-mirrors

有没有办法测试Dart中是否存在函数或方法而不试图调用它并捕获NoSuchMethodError错误? 我正在寻找像

这样的东西
if (exists("func_name")){...}

测试名为func_name的函数是否存在。 提前谢谢!

1 个答案:

答案 0 :(得分:6)

您可以使用mirrors 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