Je suis confus avec la façon dont Scala gère la division par zéro. Voici un extrait de code REPL.Scala division par zéro donne des résultats différents
scala> 1/0
java.lang.ArithmeticException:/by zero
... 33 elided
scala> 1.toDouble/0.toDouble
res1: Double = Infinity
scala> 0.0/0.0
res2: Double = NaN
scala> 0/0
java.lang.ArithmeticException:/by zero
... 33 elided
scala> 1.toInt/0.toInt
java.lang.ArithmeticException:/by zero
... 33 elided
Comme vous pouvez le voir dans l'exemple ci-dessus, selon la façon dont vous divisez par zéro, vous obtenez une des options suivantes:
- « java.lang.ArithmeticException:/par zéro »
- "Double = NaN"
- "Double = Infinity"
Cela rend le débogage particulièrement difficile tout en traitant des données de caractéristiques inconnues. Quel est le raisonnement derrière cette approche, ou même une meilleure question, comment gérer la division par zéro d'une manière unifiée dans Scala?
Je pense que cela a à voir avec les différents types de données. Lorsque vous effectuez des calculs différents, mais liés, essayez d'utiliser toujours les mêmes types de données. Par exemple: Double, Int, etc. – Titulum
Vous avez peut-être affaire à des données de caractéristiques inconnues, mais dans une langue à typage statique comme Scala, vous n'avez pas affaire à des données de type inconnu. –
@AlexeyRomanov Je comprends ce que tu veux dire. Cependant, je suppose que la plupart des gens seraient d'accord que ce genre d'approche est sujette à des bugs très sales et très fastidieux à gérer dans chaque opération arithmétique que vous écrivez. – Ahmedov