0

我不明白为什么如果不满足过滤器的条件,恢复返回空成功

case class Account(acctNum: Int, balance: Double, interestRace: Double)

   def getAccount()={
    Account(111,7000.0,1.2)
   }

  val withdrowal = 1500

  val acc = Try(getAccount())


  val withdrowalResult = acc map {
    (x: Account) => Account(x.acctNum, x.balance-withdrowal,x.interestRace)
    } filter{
      (x: Account) => x.balance>8000
    }recover{
    case nsee: NoSuchElementException => println("Something went wrong")
  }
  println(withdrowalResult)

如果我打印withdrawarResult,我会得到

Success(())

如果我只是想在我的条件不满足的情况下获得失败并处理异常,我该怎么办?

4

1 回答 1

2

你使用了recover,它恢复了Failure to Success。鉴于您只是在恢复中打印并且没有产生任何结果,因此您有 Success[Unit] (Unit 是 println 的结果)。

....filter(x => x.balance > 8000)
   .recover { case nsee: NoSuchElementException => "Not empty" } 
// res4: scala.util.Try[java.io.Serializable] = Success(Not empty)

如果您想要失败,请不要恢复:

val withdrowalResult = acc map {
    (x: Account) => Account(x.acctNum, x.balance-withdrowal,x.interestRace)
    } filter {
      (x: Account) => x.balance>8000
    }
// Failure(java.util.NoSuchElementException: Predicate does not hold for Account(111,5500.0,1.2))
于 2013-09-26T16:30:12.763 回答