与Scala Try的类型不匹配

时间:2019-01-17 05:22:41

标签: scala

下面,我正在尝试提取Tweet JSON字段retweeted_status。我检查JSON是否包含该字段,然后使用Try提取它。我想将提取的值在成功时分配给var retweet_count,在失败时将retweet_count分配为0。但是当我尝试使用此case Success(result)=> retweet_count = result时,出现不匹配错误,指出BigInt无法与单位匹配。

打印出retweeted_favorite_count2的类,我得到scala.runtime.BoxedUnit。解决此问题的方法是什么?

var retweet_count: BigInt= 0
if (value.has("retweeted_status")){
  val retweeted_favorite_count0 = value\"retweeted_status"\"favorite_count"
  val retweeted_favorite_count1 = Try(retweet_count=retweeted_favorite_count0.extract[BigInt])
  val retweeted_favorite_count2 = retweeted_favorite_count1 match {
                case Success(result)=> result
                case Failure(exception)=> 0
                case _=> 0
              }
  println(" retweeted_favorite_count2"+ retweeted_favorite_count2.getClass )

1 个答案:

答案 0 :(得分:3)

您的Try的内容是一个赋值:retweet_count=...赋值没有有意义的返回值,因此result中的Success(result)不是Int。 / p>

您可以通过评估Try后进行分配来解决此问题。

val retweeted_favorite_count2 =
  Try(retweeted_favorite_count0.extract[BigInt]) match {
    case Success(result)=> 
      retweet_count = result
      result
    case Failure(_)=> 0
  }