Наличие зеркал, возвращающих фьючерсы, резко ограничивает то, что вы можете с ними делать.Dart Mirror API: получение результата вызова отражения
Например,
class ObjectA {
methodA(){}
methodB(){}
}
class DynamicWrapper extends MagicalDynamicWrapper {
ObjectA real;
Map<String, Function> methods;
DynamicWrapper(this.real, this.methods);
}
var w = new DynamicWrapper(new ObjectA(), {"methodB" :(){ 'do something' }});
w.methodA() // calls ObjectA.methodA
w.methodB() // calls 'do something'
Путь я обычно делаю это путем определения noSuchMethod в MagicalDynamicWrapper:
- что проверит, есть ли метод с таким именем в методах карту, затем назовите ее.
- , и если его нет, он будет называть «реальный» объект через отражение.
К сожалению, вызов реального объекта всегда будет возвращать будущее. Так что это не сработает.
В какой-то момент можно было получить значение будущего (используя значение getter), но этот геттер больше не доступен.
Мой вопрос:
Есть ли способ, чтобы получить результат отражения вызова синхронно?
В распределенной настройке фьючерсы - это, безусловно, путь. Но в нераспределенной настройке, где доступна вся метаинформация, должно быть возможно получить значение вызова отражения. Я бы сделал огромную разницу для авторов тестовых фреймворков и инструментов построения.
Благодарим за отзыв. Метод invokeOn работает в моем случае. Я надеюсь, что API синхронизации синхронизации будет добавлен в ближайшее время. Потому что почти всякая интересная библиотека, которую я думаю о письме, требует этого. –