我正在使用Option Type的isEmpty
方法来检查是否没有值。我不想在我的情况下使用case
match
,我只想检查是否有None
,因为我会向调用者抛出错误。但即使值为isEmpty
,None
方法也会失败。
这是我试过的!
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"))
}
它没有进入if条件。我试着在questionOption上做一个println,然后打印出None。所以想知道为什么我没有进入if条件。
答案 0 :(得分:23)
从问题的评论中,出现了真正的问题:
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"))
}
本身,if
返回类型Unit
,这样您的语句就不会返回任何有用的内容。如果要返回需要添加的内容else
,然后返回结果类型的最小上限。因此
>>> val yo = if(1 != 0) 4
yo: Unit
>>> val ya = if(1 != 0) Left(1) else Right("got it")
ya: Either[Int, String]
答案 1 :(得分:10)
您可以执行布尔检查以查看值为None并将错误抛给调用者,否则继续处理:
scala> val o: Option[Any] = None
o: Option[Any] = None
scala> println(o == None)
true
scala> println(o != None)
false
但也许更好的方法来完成你要做的事情,提醒调用者错误或继续处理,将使用Scala的Try成语来处理错误。