Scala教程之:Option-Some-None】的更多相关文章

在之前的文章中我们提到了Option,scala中Option表示存在0或者1个元素,如果在处理异常的时候Option就会有很大的限制,因为Option如果返回None,那么我并不知道具体的异常到底是什么,这样scala引入了Either. 顾名思意,Either表示或者是这一个元素或者是那个元素.这样在异常处理的时候就非常有用了. 我们先看一下Either的定义: sealed abstract class Either[+A, +B] extends Product with Seriali…
文章目录 定义返回Future的方法 阻塞方式获取Future的值 非阻塞方式获取Future的值 Future链 flatmap VS map Future.sequence() VS Future.traverse() Future.foldLeft VS Future reduceLeft Future firstCompletedOf Future zip VS zipWith Future andThen 自定义threadpool recover() recoverWith() an…
文章目录 Option和Some Option和None Option和模式匹配 在java 8中,为了避免NullPointerException,引入了Option,在Scala中也有同样的用法.他们就是Option, Some 和None. 其中Option是一个抽象类. sealed abstract class Option[+A] extends Product with Serializable 我们看下Some和None的定义: final case class Some[+A]…
文章目录 public Protected private scoped private 和 scoped protected 和java很类似,scala也有自己的可见性规则,不同的是scala只有private和protected关键字,没有public关键字,同时scala还提供了更加细粒度的访问控制如protected[scope]和private[scope]. public scala中默认的访问权限就是public,这意味着在scala中没有可见性关键字的声明体,他的访问权限就是p…
文章目录 函数的参数和返回值 可变类型的变异 在之前的文章中我们简单的介绍过scala中的协变和逆变,我们使用+ 来表示协变类型:使用-表示逆变类型:非转化类型不需要添加标记. 假如我们定义一个class C[+A] {} ,这里A的类型参数是协变的,这就意味着在方法需要参数是C[AnyRef]的时候,我们可以是用C[String]来代替. 同样的道理如果我们定义一个class C[-A] {}, 这里A的类型是逆变的,这就意味着在方法需要参数是C[String]的时候,我们可以用C[AnyRe…
文章目录 mutable HashMap immutable HashMap 集合在程序中是非常有用的,只有用好集合才能真正感受到该语言的魅力.在scala中集合主要在三个包里面:scala.collection, scala.collection.immutable和scala.collection.mutable. scala中引入不可变集合是为了方便程序的使用并减少在程序中的未知风险.如果一个集合被定义为不可变的,那么我们在使用的过程中就可以指定该集合是不会变化的,可以放心使用. 我们看下…
Scala中有一个很有用的traits叫PartialFunction,我看了下别人的翻译叫做偏函数,但是我觉得部分函数更加确切. 那么PartialFunction是做什么用的呢?简单点说PartialFunction用在模式匹配中,是一个不完整的函数,它只实现了函数的部分功能,也就是列举了部分case的情况. 我们先看下PartialFunction的定义: trait PartialFunction[-A, +B] extends (A => B) { ... def isDefinedA…
Enumeration应该算是程序语言里面比较通用的一个类型,在scala中也存在这样的类型, 我们看下Enumeration的定义: abstract class Enumeration (initial: Int) extends Serializable Enumeration是一个抽象类,它定义四个value方法,来设置内部的值, 四个value方法如下定义: /** Creates a fresh value, part of this enumeration. */ protecte…
文章目录 默认参数值 命名参数 scala的参数有两大特点: 默认参数值 命名参数 默认参数值 在Scala中,可以给参数提供默认值,这样在调用的时候可以忽略这些具有默认值的参数. def log(message: String, level: String = "INFO") = println(s"$level: $message") log("System starting") // prints INFO: System starting…
文章目录 隐式类 限制条件 字符串插值 s 字符串插值器 f 插值器 raw 插值器 自定义插值器 Scala是扩展的,Scala提供了一种独特的语言机制来实现这种功能: 隐式类: 允许给已有的类型添加扩展方法 字符串插值: 可以让用户使用自定义的插值器进行扩展 隐式类 隐式类是在scala 2.10中引入的,隐式类指的是用implicit关键字修饰的类.在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换. 下面举个例子: object Helpers { implicit clas…