Represents optional values. Instances of Option are either an instance of scala.Some or the object None.
Option类代表可选的值。Option的实例要么是Some的实例,要么是None的实例。

The most idiomatic way to use an scala.Option instance is to treat it as a collection or monad and use map,flatMap, filter, or foreach:

最符合语言习惯的使用Option的方法是把它看作集合或一元算子。然后使用map, flatmap, filter以及foreach等方法。

val name: Option[String] = request getParameter "name"
val upper = name map { _.trim } filter { _.length != 0 } map { _.toUpperCase }
println(upper getOrElse "")

Note that this is equivalent to
这个等价于如下的代码

val upper = for {
  name <- request getParameter "name"
  trimmed <- Some(name.trim)
  upper <- Some(trimmed.toUpperCase) if trimmed.length != 0
} yield upper
println(upper getOrElse "")

注意这里Scala的For循环与Java的不同之处:Scala的For循环用单个的{}组成,每一行都是一个“A <- B” 的表达式,共有N行。

前一行<-表达式的左值会被作为下一行<-表达式的右值的参数传递。而且第三行的if表达式所处的位置也是相当的你逆天,新手根本无法接收这样的怪异语法。

Because of how for comprehension works, if None is returned from request.getParameter, the entire expression results in None
因为for的特殊使用,如果request getParameter返回了None,那么整个for表达式就返回None

This allows for sophisticated chaining of scala.Option values without having to check for the existence of a value.
这样就允许了Option类值的链式传递,而免去了对值的存在性的反复检查操作

A less-idiomatic way to use scala.Option values is via pattern matching:
还有一种使用Option类的方法是模式匹配,代码如下:

val nameMaybe = request getParameter "name"
nameMaybe match {
  case Some(name) =>
    println(name.trim.toUppercase)
  case None =>
    println("No name value")
}

最新文章

  1. Failed to apply plugin [id &#39;com.android.application&#39;] 和 Could not find com.android.tools.build:gradle:2.XX的最正确的解决方法
  2. Java for LeetCode 204 Count Primes
  3. iOS开发拓展篇—xib中关于拖拽手势的潜在错误
  4. NPOI根据模板生成chart图表导出Excel
  5. PHP的模板引擎这点事儿
  6. JSP HTML区别
  7. 学习之路十四:客户端调用WCF服务的几种方法小议
  8. jquery 自动跳出列表
  9. linux卸载rpm包
  10. perl的Getopt::Long和pod::usage ?
  11. Effective Java 第三版——28. 列表优于数组
  12. 小细节,大用途,35 个 Java 代码性能优化总结!
  13. LUYA-CDM
  14. C++笔记之关键字explicit
  15. Mad Libs游戏,华氏与摄氏转换
  16. leetcode - valid number 正则表达式解法
  17. linux4.10.8 内核移植(一)---环境搭建及适配单板。
  18. mysql数据库连接的测试代码语句片断
  19. mysql 使用如下三种方式应用where条件,从好到坏
  20. Class.forName(&quot;com.mysql.jdbc.Driver&quot;)找不到类

热门文章

  1. python第一个程序:计算体脂率
  2. 下载excle文件之工具
  3. 无界面上(linux)生成测试报告(3)
  4. 【HTML5】---【HTML5提供的一些新的标签用法以及和HTML 4的区别】
  5. UniEAP V4 WorkShop用户手册
  6. Toad oracle
  7. java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))
  8. 用poi从excel文档导入数据
  9. Unity中的动画系统和Timeline(3) 混合树和动画匹配
  10. Python学习之数据库初识