Как и вопрос в Вызов метода динамического класса в PHP, я хочу сделать это в Дарт.
var = "name";
page.${var} = value;
page.save();
Это возможно?
Как и вопрос в Вызов метода динамического класса в PHP, я хочу сделать это в Дарт.
var = "name";
page.${var} = value;
page.save();
Это возможно?
С помощью зеркал можно достичь нескольких целей.
Вот пример того, как устанавливать значения классов и как динамически вызывать методы:
import 'dart:mirrors';
class Page {
var name;
method() {
print('called!');
}
}
void main() {
var page = new Page();
var im = reflect(page);
// Set values.
im.setField("name", "some value").then((temp) => print(page.name));
// Call methods.
im.invoke("method", []);
}
Если вам интересно, im
- это InstanceMirror
, который в основном отражает экземпляр page
.
Есть еще один вопрос: Есть ли способ динамически вызвать метод или установить переменную экземпляра в классе в Dart?
Для этого можно использовать Dart Mirror API. . Mirror API сейчас полностью не реализован, но вот как это может работать:
import 'dart:mirrors';
class Page {
String name;
}
main() {
final page = new Page();
var value = "value";
InstanceMirror im = reflect(page);
im.setField("name", value).then((_){
print(page.name); // display "value"
});
}
Futures.wait()
здесь не имеет особого смысла. Вы можете пропустить его, и результат будет тем же. Futures.wait()
возвращает Future
, который завершается, когда данные действия завершаются, поэтому вам действительно нужно написать .then()
, чтобы заставить его правильно работать. Конечно, теперь это работает по счастливой случайности, поскольку операции не асинхронные :)
- person Kai Sellgren; 08.11.2012
await
www.dartbug.com/104
- person Alexandre Ardhuin; 08.11.2012
Вы можете использовать Serializable
Например:
import 'package:serializable/serializable.dart';
@serializable
class Page extends _$PageSerializable {
String name;
}
main() {
final page = new Page();
var attribute = "name";
var value = "value";
page["name"] = value;
page[attribute] = value;
print("page.name: ${page['name']}");
}