Question très simple. J'ai la classe inutile:
class Useless{
double field;
Useless(this.field);
}
Je commets ensuite le péché mortel et appelle new Useless(0);
En mode vérifié (c'est ainsi que je lance mes tests) qui explose, car 'int' n'est pas un sous-type de type 'double' =.
Maintenant, cela fonctionne si j'utilise new Useless(0.0)
, mais honnêtement, je passe beaucoup de temps à corriger mes tests en mettant des .0 partout et je me sens assez stupide de le faire.
À titre temporaire, j'ai réécrit le constructeur comme suit:
class Useless{
double field;
Useless(num input){
field = input.toDouble();
}
}
Mais c'est moche et j'ai peur lent si on m'appelle souvent. Y a-t-il une meilleure manière de faire cela?
Dans Dart 2.1 , les littéraux entiers peuvent être directement utilisés là où double
est attendu. (Voir https://github.com/Dart-lang/sdk/issues/34355 .)
Notez que cela s'applique uniquement aux littéraux . int
les variables ne seront toujours pas automatiquement promues en double
, donc du code comme:
double reciprocal(double d) => 1 / d;
int x = 42;
reciprocal(x);
échouera toujours, et vous devrez faire:
reciprocal(x.toDouble());
Simplement toDouble()
Exemple:
int intVar = 5;
double doubleVar = intVar.toDouble();
Merci à @jamesdlin qui a effectivement donné cette réponse dans un commentaire à ma réponse précédente ...
Vous pouvez aussi utiliser:
int x = 15;
double y = x + .0;
Il n'y a pas de meilleur moyen de le faire que les options que vous avez incluses :(
Je suis mordu par ce lot aussi, pour une raison quelconque, je ne reçois aucun avertissement dans l'éditeur et il échoue juste au moment de l'exécution; puissant ennuyeux :(
De cette tentative:
class Useless{
double field;
Useless(num input){
field = input.toDouble();
}
}
Vous pouvez utiliser la méthode d'analyse du double class
qui prend une chaîne.
class Useless{
double field;
Useless(num input){
field = double.parse(input.toString()); //modified line
}
}
Une manière plus compacte d'écrire la classe ci-dessus en utilisant les initialiseurs du constructeur est:
class Useless{
double _field;
Useless(double field):_field=double.parse(field.toString());
}