Dynamic class method invocation in PHP'daki gibi, bunu da Dart'ta yapmak istiyorum.Dart'ta dinamik sınıf yöntemi çağırma
var = "name";
page.${var} = value;
page.save();
Bu mümkün mü?
Dynamic class method invocation in PHP'daki gibi, bunu da Dart'ta yapmak istiyorum.Dart'ta dinamik sınıf yöntemi çağırma
var = "name";
page.${var} = value;
page.save();
Bu mümkün mü?
Eğer Mirrors ile elde edebilirsiniz birkaç şey vardır. merak
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", []);
}
durumda, im
temelde page
örneğini yansıtan bir InstanceMirror
şöyledir:
İşte sınıfların değerleri ayarlamak için ve nasıl dinamik yöntemleri çağırmak için nasıl bir örnek. Is there a way to dynamically call a method or set an instance variable in a class in Dart?
Böyle bir şey yapmak için Dart Mirror API'u kullanabilirsiniz. Ayna API tam şimdi hayata ama burada işe yarayabilir nasıl değildir:
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()' çağrısına burada biraz anlam ifade etmiyor. Bunu atlayabilir ve sonuç aynıdır. Futures.wait(), verilen eylemler tamamlandığında tamamlanan bir 'Gelecek 'i döndürür; bu nedenle, düzgün çalışması için gerçekten bir' .then() 'yazmanız gerekir. Tabii ki şimdi operasyonlar async olmadığı için şans eseri çalışıyor :) –
Yorumunuz için teşekkürler. Gelecek kullanımında yeniyim ve 'beklemek' önerisiyle karıştırdım www.dartbug.com/104 –
Sen Örneğin Serializable
kullanabilirsiniz::
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']}");
}
emin olun yeşil onay bu cevaplardan biri için
de başka soru var! İkisi de doğru. –