博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala Essentials: 字面值
阅读量:6381 次
发布时间:2019-06-23

本文共 1842 字,大约阅读时间需要 6 分钟。

类型系统

引用类型

  • AnyRef的子类

  • 使用new构造对象

  • 当存在默认构造函数,可以略去括号

  • AnyRef等价于java.lang.Object

  • 可以将null赋值给Reference Type

值类型

  • AnyVal的子类

  • Char, Byte, Short, Int, Long, Float, Double, Unit, Boolean

  • 不能使用new构造实例,而使用Literal Values构造实例

  • 编译器将其映射为Java原生类型,以便提升性能

  • 不能将null赋值给Int的变量

Int为例,其定义类似于:

final abstract class Int private extends AnyVal
  • final表示不能被子类化

  • abstract表示不能被实例化

  • private表示主构造函数私有化,进一步保证不能被实例化

  • extends AnyVal表示只能使用字面值构造实例

内置字面值

Unit()

Unit类型在JVM中对应于Javavoid

final abstract class Unit private extends AnyVal

()是其唯一的实例。

classOf[Unit]   // Class[Unit] = void().getClass     // Class[Unit] = voidclassTag[Unit]  // scala.reflect.ClassTag[Unit] = UnitclassTag[Unit].runtimeClass // Class[_] = void

具有返回值类型为Unit的函数常常被称为「过程」(Procedure)。

def update(i: Int, value: Char): Unit = {  ...}

常常忽略Unit =Scala默认推演为Unit。上例等价于

def update(i: Int, value: Char) {  ...}

返回值为Unit的函数,代表了「副作用」语义;从某种意义上讲,「过程」是一种反函数式的思维。

Nullnull

Null是所有AnyRef的子类型,存在唯一的实例null。不能将null赋予「值类型」,例如Int, Boolean等。

val num: Int = null  // Compile Error

符号

'1th'2th

如果符号中有空格,可以是使用Symbol::apply直接构造

Symbol("Programming Scala")

元组

(1, "two")等价于Tuple2(1, "twp"),或者Tuple2[Int, String](1, "two")

val t1 = (1, "two")val t1: (Int,String) = (1, "two")val t2: Tuple2[Int,String] = (1, "two")

函数值

(i: Int, s: String) => s+i是类型为Function2[Int, String, String]的一个字面值。

字面值的类型定义常常用于类型声明,如下三个变量定义是相同的:

val f1: (Int, String) => String = (i, s) => s + ival f2 = (i: Int, s: String) => s + ival f3: Function2[Int, String, String] = (i, s) => s+ i

自定义自面值

Map

val capital = Map("US" -> "Washington", "France" -> "Paris")

"US" -> "Washington"构造了一个类型为Tuple2[String, String]的二元组:("US", "Washington")

package scalaobject Predef {  implicit final class ArrowAssoc[A](private val self: A) extends AnyVal {    def ->[B](y: B) = (self, y)  }}

Regex

val regex = "([0-9]+) ([a-z]+)".r

需要注意的是,r并非java.lang.String的方法,Scala拥有一套完备的机制增强既有类库的能力。

转载地址:http://ufhqa.baihongyu.com/

你可能感兴趣的文章
lua基础【三】唯一数据结构table表
查看>>
Web应用安全审计工具WATOBO
查看>>
CSS3_animation笔记
查看>>
Android Google 地图 API for Android
查看>>
从 Zero 到 Hero ,一文掌握 Python--转
查看>>
【软件下载】整理一些外国的工具软件下载到网盘方便国内使用
查看>>
idea项目左边栏只能看到文件看不到项目结构
查看>>
idea如何编译maven项目
查看>>
在centos7下安装svn
查看>>
删除软链接
查看>>
windows7下MSN如何最小化到任务栏
查看>>
HDU-3016 Man Down 线段树
查看>>
初步认识注册表(待续)
查看>>
只能输入数字的TextBox自定义控件
查看>>
自定义事件
查看>>
浮点数的二进制
查看>>
主库配置关于Dataguard Online redo log 和 Standby redo log
查看>>
[内核笔记1]内核文件结构与缓存——inode和对应描述
查看>>
Red Hat忘记root密码了怎么办?
查看>>
Team Foundation Server (TFS) 2015 安装指导
查看>>