美文网首页Scala Tour
[译]Scala统一的类型

[译]Scala统一的类型

作者: steanxy | 来源:发表于2017-05-03 13:45 被阅读11次

在Scala中,所有值都有类型,包括数值和函数。下图说明了类的层次结构。

image.png

Scala类型的层次结构

Any
是所有类的父类,也称为top类型。它定义了一些通用的方法,如equalshashCodetoStringAny的两个直接子类是AnyValAnyRef

AnyVal代表值类型。有9中预定义的值类型,他们都是非空的:DoubleFloatLongIntShortByteCharUnit, 和BooleanUnit是一种没有任何意义信息的值类型。可以使用()声明Unit的实例。所有函数都必须有返回值,所以有时候Unit是有用的返回类型。

AnyRef代表引用类型。所有非值类都定义为引用类型。在Scala中,每个用户定义的类都是AnyRef的子类型。如果在Java运行时环境的上下文中使用Scala,则AnyRef对应于java.lang.Object

这里有个示例说明字符串,整型,字符,布尔值以及函数都是对象,就像其它对象一样:

val list: List[Any] = List(
  "a string",
  732,  // an integer
  'c',  // a character
  true, // a boolean value
  () => "an anonymous function returning a string"
)

list.foreach(element => println(element))

程序中定义了一个List[Any]类型的变量list。这个列表用多种类型的元素初始化,但是都是scala.Any的实例,所以可以将它们添加到列表中。

下面是程序的输出:

a string
732
c
true
<function>

类型转换

值类型可以按照如下方式进行转换:

image.png

例如:

val x: Long = 987654321
val y: Float = x  // 9.8765434E8 (note that some precision is lost in this case)

val face: Char = '☺'
val number: Int = face  // 9786

转换是单向的。下面的转换不能通过编译:

val x: Long = 987654321
val y: Float = x  // 9.8765434E8
val z: Long = y  // Does not conform

你也将引用类型转换为其子类型。之后会进行详细说明。

Nothing和Null

Nothing是所有类型的子类型,也叫做bottom类型。没有值的类型是Nothing。通常用于标记未终止,如抛出异常,程序退出或者无限循环(即它时一种没有值的类型,或者不正常返回的方法)

Null是所有引用类型(即AnyRef的任何子类型)的子类型。它有个单一值,由关键字null标记。Null用于与其它JVM语言进行交互,不应该在Scala代码中使用它。之后会讨论替代它的方法。

相关文章

  • [译]Scala统一的类型

    在Scala中,所有值都有类型,包括数值和函数。下图说明了类的层次结构。 Scala类型的层次结构 Any是所有类...

  • Scala之旅(TOUR OF SCALA)——类(CLASSE

    类在 Scala 中是创建对象的蓝图。类可以包含方法,常量,变量,类型,对象,特征和类,它们被统一称为成员。类型成...

  • -6- 类型层次结构

    [参考link] Scala类型层次结构 与Java不同,Scala中没有原生类型。Scala中的所有数据类型都是...

  • Scala相关文章索引(2)

    基本常识 scala编程第17章学习笔记(1)——集合类型 scala Map类型笔记 scala代码风格指南--...

  • 快学Scala读书笔记

    scala不刻意区分原生类型和引用类型 scala单参数方法可以用运算符形式调用,例如: scala没有提供"++...

  • Scala 之旅(TOUR OF SCALA)——统一类型(UN

    在 Scala 中,所有的值都有类型,包括数值和函数。下面这个图表说明了类型继承结构的子集。 Scala 类型继承...

  • Q:java.lang.NoClassDefFoundError

    版本统一: spark-2.2.0scala-2.11.8

  • -7- scala数据类型

    [参考link] Scala 布尔类型 布尔类型限于文本true或文本false,如下面的示例所示: Scala ...

  • Essential Scala: Literals

    Scala对象系统 总体上,Scala对象系统可分为两类: 引用类型 值类型 引用类型 AnyRef的子类 使用n...

  • Scala泛型

    泛型类是以类型作为参数,Scala类型参数放在方括号[]中,Java放在<>中 变型 Variance Scala...

网友评论

    本文标题:[译]Scala统一的类型

    本文链接:https://www.haomeiwen.com/subject/qzbktxtx.html