Scala基础知识01

一、几种常见的特殊类

1、option[T]

option[T]主要是用来避免NullPointerException异常的(Option本身是一个容器)

Option、 None、 Some 是 scala 中定义的类型,它们在 scala 语言中十分常用,因此这三个类型很重要。 None、 Some 是 Option 的子类,它主要解决值为 null 的问题,在 java 语言中,对于定义好的 HashMap,如果 get 方法中传入的键不存在,方法会返回 null,在编写代码的时候对于 null 的这种情况通常需要特殊处理,然而在实际中经常会忘记,因此它很容易引起NullPointerException 异常。在 Scala 语言中通过 Option、 None、 Some 这三个类来避免这样的问题,这样做有几个好处,首先是代码可读性更强,当看到 Option 时,我们自然而然就知道它的值是可选的,然后变量是 Option,比如 Option[String]的时候,直接使用 String 的话,编译直接通不过。

2、Any

   Any是abstract类,它是Scala类继承结构中最底层的。所有运行环境中的Scala类都是直接或间接继承自Any这个类,它就是其它语言(.Net,Java等)中的Object。

3、Nothing

Nothing是所有类型的子类,Nothing没有对象,但是可以用来定义类型。例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing(虽然不会返回) 

def get(index:Int):Int={
    if(x<0)
        throw new Exception(…)
    else
        ….
}
if语句是表达式,有返回值,必然有返回值类型,如果x < 0,抛出异常,返回值的类型为Nothing,Nothing也是Int的子类,所以,if表达式的返回类型为Int,get方法的返回值类型也为Int。
4、Null和Nil

Null是所有AnyRef的子类,在scala的类型系统中,AnyRef是Any的子类,同时Any子类的还有AnyVal。对应java值类型的所有类型都是AnyVal的子类。所以Null可以赋值给所有的引用类型(AnyRef),不能赋值给值类型,这个java的语义是相同的。 null是Null的唯一对象

Nil是一个空的List,定义为List[Nothing],根据List的定义List[+A],所有Nil是所有List[T]的子类。

5、Unit

package scala
final abstract class Unit() extends scala.AnyVal {
  override def getClass() : _root_.scala.Predef.Class[scala.Unit] = { /* compiled code */ }
}
object Unit extends scala.AnyRef with scala.AnyValCompanion {
  def box(x : scala.Unit) : scala.runtime.BoxedUnit = { /* compiled code */ }
  def unbox(x : java.lang.Object) : scala.Unit = { /* compiled code */ }
  override def toString() : java.lang.String = { /* compiled code */ }
}
Unit是函数和方法的返回值类型,表示没有返回值。这一点和java的void有点像,但不等同于java的void,因为java的void可以返回null。

二、常见基本数据种类

Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable 。
在 Scala 中集合有可变(mutable)和不可变(immutable)两种类型, immutable 类型的集合初始化后就不能改变了(注意与 val 修饰的变量进行区别)。

Map:
Map(映射)是一种可迭代的键值对(key/value)结构。
所有的值都可以通过键来获取。
Map 中的键都是唯一的。
Map 也叫哈希表(Hash tables)。
Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。
默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类
在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。
 

作者:zgm12

相关推荐

JavaScript创建表格的方法

javascript设计模式 – 单例模式原理与应用实例分析

详解vue-flickity的fullScreen功能实现

JavaScript实现捕获鼠标坐标

JavaScript实现捕获鼠标坐标