数据结构域算法设计-Scala详细总结(精辟版++)

上传人:woxinch****an2018 文档编号:39302224 上传时间:2018-05-14 格式:DOCX 页数:28 大小:575.08KB
返回 下载 相关 举报
数据结构域算法设计-Scala详细总结(精辟版++)_第1页
第1页 / 共28页
数据结构域算法设计-Scala详细总结(精辟版++)_第2页
第2页 / 共28页
数据结构域算法设计-Scala详细总结(精辟版++)_第3页
第3页 / 共28页
数据结构域算法设计-Scala详细总结(精辟版++)_第4页
第4页 / 共28页
数据结构域算法设计-Scala详细总结(精辟版++)_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《数据结构域算法设计-Scala详细总结(精辟版++)》由会员分享,可在线阅读,更多相关《数据结构域算法设计-Scala详细总结(精辟版++)(28页珍藏版)》请在金锄头文库上搜索。

1、Scala 总结-2015-1-19 12:33:54本文档针对 scala 2.10.x,由于 scala 目前发展迅速,因此可能会和其他版本的不同。=概述scala 是一门以 java 虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳 特性结合在一起的静态类型编程语言。 scala 是纯粹的面向对象的语言。java 虽然是面向对象的语言,但是它不是纯粹的,因 为 java 的基本数据类型不是类,并且在 java 中还有静态成员变量和静态方法。相反,scala 是纯粹面向对象的,每个值都是对象,每个操作都是方法调用。 scala 也是一个成熟的函数式语言。函数式编程有两个指导思想

2、:函数是头等值,也 就是说函数也是值,并且和其他类型(如整数、字符串等)处于同一地位,函数可以被当 作参数传递,也可以被当作返回值返回,还可以在函数中定义函数等等;程序的操作应 该把输入值映射为输出值而不是就地修改,也就是说函数调用不应产生副作用,虽然函数 式编程语言鼓励使用“无副作用”的方法,但是 scala 并不强制你必须这么做。scala 允许 你使用指令式的编程风格,但是随着你对 scala 的深入了解,你可能会更倾向于一种更为函 数式的编程风格。向函数式编程转变,你就应该尽量去使用 val、不可变对象、无副作用方 法,而不是 var、可变对象、有副作用方法。要明白的是,从指令式编程向

3、函数式编程的转 变会很困难,因此你要做好充分的准备,并不断的努力。 scala 运行于 JVM 之上,并且它可以访问任何的 java 类库并且与 java 框架进行互操作, scala 也大量重用了 java 类型和类库。第一个 scala 程序:object ScalaTest def main(args: ArrayString) println(“hello scala.“)=scala 解释器安装好 scala 并配置好 PATH 环境变量之后,就可以在终端中输入“scala”命令打开 scala 解释器。在其中,你可以像使用 shell 一样,使用 TAB 补全、Ctrl+r 搜索、

4、上下方向键 切换历史命令等等。退出 scala 解释器,可以使用命令:“:q”或者“:quit” 。 由于解释器是输入一句执行一句,因此也常称为 REPL。REPL 一次只能看到一行代码, 因此如果你要在其中粘贴代码段的话,可能会出现问题,这时你可以使用粘贴模式,键入 如下语句: :paste然后把代码粘贴进去,再按下 Ctrl+d,这样 REPL 就会把代码段当作一个整体来分析。=scala 作为脚本运行scala 代码也可以作为脚本运行,只要你设置好代码文件的 shell 前导词(preamble) , 并将代码文件设置为可执行。如下:#!/usr/bin/env scalaprintln

5、(“这是 scala 脚本“)设置代码文件为可执行,即可执行之啦。 scala 脚本的命令行参数保存在名为 args 的数组中,你可以使用 args 获取命令行输入 的程序参数。=scala 编译运行scala 编译器 scalac 会将 scala 代码编译为 jvm 可以运行的字节码,然后就可以在 jvm 上执行了。假设有一个 Hello.scala 文件,我们就可以使用 scalac Hello.scala 编译,然后使 用 scala Hello 运行。当然也可以使用 java 工具来运行,但需要在 classpath 里指定 scala- library.jar。对于 classpa

6、th,在 Unix 家族的系统上,类路径的各个项目由冒号“:”分隔, 在 MS Windows 系统上,它们由分号“;”分隔。例如,在 linux 上你可以输入这样的命令来 运行(注意 classpath 最后加一个“.” ):java -classpath /usr/local/scala-2.10.4/lib/scala-library.jar:. Hello=scala IDE 开发环境你可以使用 eclipse 或者 intellij idea 作为 scala 的 IDE 开发环境,但都需要安装 scala 插件才行。下面分别介绍这两种方式:eclipse 开发环境配置:scala

7、ide for eclipse(下载地址:http:/scala-ide.org)中集成了 scala 插件,你可以直接 使用它进行开发,不过它包含的可能不是我们想要的 scala 版本,因此,还是在该网站上下 载对应的 scala 插件,插在 eclipse 上,这样更好啊。 我们先安装 eclipse juno,然后下载 eclipse juno 以及 scala 2.10.4 对应的 scala sdk 插件 升级包:update-site.zip。将插件解压缩,将 features 和 plugins 目录下的所有东东都复制 到 eclipse 中的对应目录中,重启 eclipse 即

8、可。然后就可以新建 scala project 了。intellij idea 开发环境配置:我们先安装好 intellij idea,然后安装 scala 插件,自动安装插件有时会非常慢,尤其是 在 china。我们还是手动配置插件吧。请注意插件的版本,必须与当前 idea 版本兼容。手 动配置插件方法如下: (1) 进入 setting plugins browse repositorits 搜索你要下载的插件名称,右侧可以找 到下载地址。 (2) 解压插件压缩包,把插件的全部文件都复制到 IntelliJ IDEA 安装程序的 plugins 文件 夹中,注意插件最好以一个单独的文件夹放

9、在 plugins 目录下。(3) 一般重启 intellij idea 就会自动加载插件,进入 setting plugins 看看有木有。如果 不自动加载的话,进入 setting plugins install plugin from disk,找到刚才复制的插件位置, 再然后就好了。 接下来就可以新建 scala project,新建时我选择的是“Scala” (不是 sbt,因为我这选择 sbt 之后,等半天 sbt 都不会配置好,郁闷啊) 。相关姿势:什么是 SBT? SBT = (not so) Simple Build Tool,是 scala 的构建工具,与 java 的 m

10、aven 地位相同。其设计宗旨是让简单的项目可以简单的配置,而复杂的项目可以复杂的配置。=scala 特点在 scala 中,语句之后的“;”是可选的,这根据你的喜好。当有多个语句在同一行时, 必须加上分号,但不建议把多个语句放在一行。 在 scala 中,建议使用 2 个空格作为代码缩进,不过我咋喜欢一个 tab 呢 ! 在 scala 中,符号“_”相当于 java 中的通配符“*” 。 scala 类似于 c+、java,索引也是从 0 开始,但元组是个例外,它从 1 开始。=数据类型scala 有 7 种数值类型:Byte、Char、Short、Int、Long、Float 和 Dou

11、ble,以及 2 种非 数值类型:Boolean 和 Unit(只有一个值“()” ,相当于 java 和 c+中的 void,即空值) 。这 些类型都是抽象的 final 类(不能使用 new 新建,也不能被继承),在 scala 包中定义,是对 java 基本数据类型的包装,因此与 java 基本数据类型有相同的长度。同时,scala 还提供了 RichInt、RichChar 等等,它们分别提供 Int、Char 等所不具备的便捷方法。 另外,scala 沿用了 java.lang 包中的 String。在 scala 中,常量也称作字面量,字符串字 面量由双引号包含的字符组成,同时 s

12、cala 提供了另一种定义字符串常量的语法原始字 符串,它以三个双引号作为开始和结束,字符串内部可以包含无论何种任意字符。 在 scala 中,我们使用方法,而不是强制类型转换,来做数值类型之间的转换,如 99.44.toInt、97.toChar。另外也可以参见显式类型转换和隐式转换。=变量scala 有两种变量:val 和 var。val 如同 java 中的 final 变量,var 如同 java 中的非 final 变量。由于 scala 是完全面向对象的,因此 val 和 var 只是声明了对象的引用是不可变的还 是可变的,并不能说明引用指向的对象的可变性。声明变量的同时需要初始化

13、之,否则该 变量就是抽象的。如果不指定变量的类型,编译器会从初始化它的表达式中推断出其类型。 当然你也可以在必要的时候指定其类型,但注意,在 scala 中变量或函数的类型总是写在变 量或函数的名称的后边。示例如下:val answer = “yes”val answer, message: String = “yes”=标识符scala 标识符有四种形式:字母数字标识符、操作符标识符、混合标识符、字面量标识 符。字母数字标识符:跟其他语言类似,由字母、数字和下划线组成,但需注意“$”字符 被保留作为 scala 编译器产生的标识符之用,你不要随意使用它啊。 操作符标识符:由一个或多个操作符字

14、符组成。scala 编译器将在内部“粉碎”操作符 标识符以转换成合法的内嵌“$”的 java 标识符。若你想从 java 代码中访问这个标识符, 就应该使用这种内部表示方式。 混合标识符:由字母数字以及后面跟着的下划线和一个操作符标识符组成。如 unary_+定义了一个前缀操作符“+”。 字面量标识符:是用反引号包含的任意字符串,scala 将把被包含的字符串作为标识 符,即使被包含字符串是 scala 的关键字。例如:你可以使用 Thread.yield()来访问 java 中 的方法,即使 yield 是 scala 的关键字。=操作符scala 的操作符和你在 java 和 C+中的预期

15、效果是一样的,但注意 scala 并不提供+、- 操作符。不过,scala 中的操作符实际上都是方法,任何方法都可以当作操作符使用,如 a + b 相当于 a.+(b)。 需要注意的是:对于不可变对象(注:对象的不可变并不是说它的引用变量是 val 的), 并不真正支持类似于“+=”这样以“=”结尾的操作符(即方法),不过 scala 还是提供了一些语法 糖,用以解释以“=”结尾的操作符用于不可变对象的情况。假设 a 是不可变对象的引用,那 么在 scala 中 a += b 将被解释为 a = a + b,这时就相当于新建一个不可变对象重新赋值给引 用 a,前提是引用变量 a 要声明为 va

16、r 的,因为 val 变量定义之后是不可变的。 更多信息参见函数(方法)部分。=块表达式与赋值在 scala 中,块包含一系列表达式,其结果也是一个表达式,块中最后一个表达式的 值就是其值。 在 scala 中,赋值语句本身的值是 Unit 类型的。因此如下语句的值为“()”:r = r * n; n -= 1正是由于上述原因,scala 中不能多重赋值,而 java 和 c+却可以多重赋值。因此,在 scala 中,如下语句中的 x 值为“()”:x = y = 1=控制结构scala 和其他编程语言有一个根本性差异:在 scala 中,几乎所有构造出来的语法结构 都有值。这个特性使得程序结构更加精简。scala 内建的控制结构很少,仅有 if、while、for、try、match 和函数调用等而已。如此之少的理由是,scala 从语法层面上支 持函数字面量。if 表达式: scala 的 if/else 语法结构与 java 等一样,但是在 scala

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号