Come la domanda allo Dynamic class method invocation in PHP Voglio farlo in Dart.Richiamo del metodo di classe dinamica in Dart
var = "name";
page.${var} = value;
page.save();
È possibile?
Come la domanda allo Dynamic class method invocation in PHP Voglio farlo in Dart.Richiamo del metodo di classe dinamica in Dart
var = "name";
page.${var} = value;
page.save();
È possibile?
Ci sono diverse cose che si possono ottenere con Mirrors.
Ecco un esempio di come impostare i valori delle classi e come chiamare i metodi in modo dinamico:
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", []);
}
Nel caso in cui ci si chiede, im
è un InstanceMirror
, che riflette sostanzialmente l'istanza page
.
C'è anche un'altra questione: Is there a way to dynamically call a method or set an instance variable in a class in Dart?
È possibile utilizzare Dart Mirror API per eseguire tale operazione. Specchio API non è pienamente attuato, ma ora ecco come potrebbe funzionare:
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"
});
}
La chiamata a 'Futures.wait()' ha poco senso qui. Puoi ometterlo e il risultato è lo stesso. 'Futures.wait()' restituisce un 'Future' che completa quando le azioni date sono complete, quindi, devi davvero scrivere un' .then() 'per farlo funzionare correttamente. Ovviamente ora funziona per fortuna visto che le operazioni non sono asincrone :) –
Grazie per il tuo commento. Sono nuovo per l'utilizzo futuro e mi sono confuso con la proposta di "attesa" www.dartbug.com/104 –
È possibile utilizzare Serializable
Ad esempio:
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']}");
}
Assicurarsi di segno di spunta verde una di quelle risposte! Sono entrambi corretti. –