8

有没有一种方法可以测试 Dart 中函数或方法的存在,而无需尝试调用它并捕获 NoSuchMethodError 错误?我正在寻找类似的东西

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

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

4

1 回答 1

7

您可以使用镜像 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);

existsFunctionfunctionName仅测试当前库中是否存在带有的函数。import因此,语句可用的函数existsFunction将返回false

于 2012-12-21T20:32:29.587 回答