一、几种常见的特殊类
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。

3597

被折叠的 条评论
为什么被折叠?



