scala.util.Try递归函数引发编译错误

时间:2018-11-22 11:54:42

标签: scala

鉴于以下返回Try [Int]的递归函数,我得到一个编译错误,提示

type mismatch; found : scala.util.Try[Int] required: Int

但是该函数返回Try[Int],这是什么问题?如果Try导致失败,我需要函数引发错误。

   def getInt(i: Int): Try[Int] = Try {
          if (i == 0)
              i
          else {
              val j = i - 1
              getInt(j)   // <-- error is thrown in this line
          }
   }

2 个答案:

答案 0 :(得分:3)

您可以在“立即尝试”中进行尝试。

尝试(哈哈!):

def getInt(i: Int): Try[Int] = 
      if (i == 0)
          Success(0)
      else
          getInt(i-1)  

答案 1 :(得分:1)

方法getInt返回Try[Int],因此您是这样编写的:

Try { if (i == 0) return integer else return Try[Int] }

要解决此问题,您必须这样做:

  def getInt(i: Int): Try[Int] = 
    if (i == 0)
      Success(i)
    else {
      val j = i - 1
      getInt(j)   // <-- error is thrown in this line
    }

随着Success扩展Try,这将起作用