8

Dart の関数またはメソッドの存在を、呼び出して NoSuchMethodError エラーをキャッチすることなくテストする方法はありますか? 私は次のようなものを探しています

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

指定された関数が存在するかどうかをテストしfunc_nameます。前もって感謝します!

4

1 に答える 1

7

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

existsFunctionfunctionNameの関数が現在のライブラリに存在するかどうかのみをテストします。したがって、importステートメントで使用可能な関数を使用すると、existsFunctionが返されfalseます。

于 2012-12-21T20:32:29.587 に答える