zoukankan      html  css  js  c++  java
  • scala try monad

    当输入的数据格式不正确时,ActivityData 中会出现 OutofIndex 错误,但更多的时候我们只关心想要的结果而不想了解出现了怎样的错误,然后会写出这样的代码
     
    def parseCSV(csv : String) = {
      try {
        Some {
          csv.split(" ").map { line =>
            val tokens = line.split(";")
            ActivityData(tokens(0).toLong, tokens(1).toInt, tokens(2).toInt, tokens(3).toLong)
          }
        }
      } catch {
        case _ : Throwable => None
      }
    }
     
    而 import scala.util.Try 后,我们可以写出这样的代码
     
    def parseCSV(csv : String) = Try {
      csv.split(" ").map { line =>
        val tokens = line.split(";")
        ActivityData(tokens(0).toLong, tokens(1).toInt, tokens(2).toInt, tokens(3).toLong)
      }
    }
     
    就像 Option 一样,Try 有 success 和 fail 两种可能性,而且用法也和 Option 类型
     
    parseCSV(csvdata).map { entries =>
      //do something with the data
    }.getOrElse {
      BadRequest("Invalid CSV Data"//this is Play Framework specific (returns a 400 HTTP response with a message)
    }
     
    我们能这么做的原因是 Try 是 monad,当一切正常时,它返回 Success(something), 失败时返回 Failure(error)
  • 相关阅读:
    Java Stream 流(JDK 8 新特性)
    Java EnumMap 实现类
    Java 设计模式
    Java lambda 表达式详解(JDK 8 新特性)
    Java forEach 方式遍历集合(Java 8 新特性)
    Java 单例设计模式
    Java public 和 private 访问修饰符
    == 、equals 、hashcode
    String
    ClassLoader 的分类及加载顺序
  • 原文地址:https://www.cnblogs.com/xinsheng/p/4470103.html
Copyright © 2011-2022 走看看