1

私が持っていると言う

class RestSimulator {

@Path("/var")
void functionOne() {
  final Type type = this.runtimeType;
  final InstanceMirror instanceMirror = reflect(this);
  final ClassMirror classMirror = instanceMirror.type; 

  final MethodMirror methodMirror = ?????
  var metadata = methodMirror.metadata;
  var path = metadata.first.reflectee;

  print(path.toString()):
  }
}

呼び出し関数の MethodMirror を取得するにはどうすればよいですか?

[更新]私はのようなことをせずに意味しました

final MethodMirror methodMirror = functions[const Symbol('functionOne')];

したがって、おそらく主な質問は次のとおりです。呼び出し元/現在の関数のシンボルを取得するにはどうすればよいですか?

4

1 に答える 1

1

私の知る限り、実行時に現在の関数の参照を取得する簡単な方法はありません。

StackTraceから名前を取得できるのでシンプルと言いますが、本当に醜く、パフォーマンスがひどいです...

class A {
  m() {
    var functionName;
    try {
      throw '';
    } catch(e, s) {
      functionName = parseStackTraceToGetMethod(s.toString());
    }
    print(functionName); // displays A.m
  }
}
parseStackTraceToGetMethod(String s) =>
  s.substring(8, s.indexOf("("));

main() {
  new A().m();
}
于 2013-07-19T08:59:48.043 に答える