J'utilise la méthode isEmpty
du type d'option pour vérifier s'il n'y a pas de valeur. Je ne veux pas utiliser le case
match
comme dans ma situation, je veux juste vérifier s'il y a None
car je lancerais une erreur à l'appelant. Mais la méthode isEmpty
échoue même si la valeur est None
.
Voici ce que j'ai essayé!
val questionOption = Question.getQuestionForQuestionId(userExam.get.examId, currQuesId + 1)
if(questionOption.isEmpty) {
Left(Failure(FailureCode.NO_DATA_FOUND, "Cannot get next exam question you tampered your cookie or cookie is lost.... >> TODO... modify the exception message"))
}
Il n'entre pas dans la condition if. J'ai essayé de faire un println sur la questionOption et il n'imprime aucun. Je me demande donc pourquoi je n'entre pas dans la condition if.
Du commentaire sous la question, le vrai problème émerge:
val questionOption = Question.getQuestionForQuestionId(userExam.get.examId, currQuesId + 1)
if(questionOption.isEmpty) {
Left(Failure(FailureCode.NO_DATA_FOUND, "Cannot get next exam question you tampered your cookie or cookie is lost.... >> TODO... modify the exception message"))
}
En soi, if
renvoie le type Unit
de sorte que votre instruction ne retourne rien d'utile. Si vous souhaitez renvoyer quelque chose, vous devez ajouter un else
qui renvoie ensuite la borne supérieure la moins élevée des types de résultats. Par conséquent
>>> val yo = if(1 != 0) 4
yo: Unit
>>> val ya = if(1 != 0) Left(1) else Right("got it")
ya: Either[Int, String]
Vous pouvez simplement faire une vérification booléenne pour voir que la valeur est None et renvoyer l'erreur à l'appelant si c'est le cas, sinon continuer le traitement:
scala> val o: Option[Any] = None
o: Option[Any] = None
scala> println(o == None)
true
scala> println(o != None)
false
Mais peut-être qu'une meilleure façon d'accomplir ce que vous essayez de faire, d'alerter l'appelant de l'erreur ou de poursuivre le traitement, serait d'utiliser l'idiome Try de Scala pour gérer les erreurs.