2013-07-19 5 views
1

сказать, что яКак получить MethodMirror для текущей функции

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 для вызывающей функции ???

[Update] Я имел в виду, не делать что-то вроде

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

Так, наверное, главный вопрос: Как я могу получить символ для/текущей функции вызова?

ответ

1

AFAIK нет простого способа получить ссылку на текущую функцию во время выполнения.

Я говорю простой, потому что вы можете получить название от 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(); 
} 
+0

Uhhh - плохо! Thx для быстрого ответа. –

+0

Там может быть хакерский способ сделать это с помощью stacktrace, но это действительно уродливо. –

+0

Я передаю запрос функции. Что-то вроде этого необходимо для аннотаций баз данных (основанных на времени исполнения). Я немного смущен, почему это еще не реализовано. –

Смежные вопросы