今天学习了Scala的剩余的基础内容和安装了spark、sbt。
Scala 函数声明格式:
def functionName ([参数列表]) : [return type]
Scala 函数定义格式:
def functionName ([参数列表]) : [return type] = { function body return [expr]}
Scala 提供了多种不同的函数调用方式
调用方法的标准格式:
functionName( 参数列表 )
函数使用了实例的对象来调用:
[instance.]functionName( 参数列表 )
Scala闭包
闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。
val multiplier = (i:Int) => i * 10
val multiplier = (i:Int) => i * factor
创建字符串:
var greeting = "Hello World!";或var greeting:String = "Hello World!";
length() 方法来获取字符串长度
s1.length();
String 类中使用 concat() 方法来连接两个字符串:
string1.concat(string2);
String 类中可以使用 printf() 方法来格式化字符串并输出,String format() 方法可以返回 String 对象而不是 PrintStream 对象。
String 中还有许多的常用方法
Scala 数组声明的语法格式:
var z:Array[String] = new Array[String](3)或var z = new Array[String](3)
多维数组一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组。
var myMatrix = ofDim[Int](3,3)
concat() 方法可以合并两个数组
range() 方法来生成一个区间范围内的数组。range() 方法最后一个参数为步长,默认为 1:
Scala中使用数组方法是需要导入 import Array._ 包
Scala集合
List的特征是其元素以线性方式存储,集合中可以存放重复对象。
Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。
Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。
元组是不同类型的值的集合
Option[T] 表示有可能包含值的容器,也可能不包含值。
迭代器不是一个容器,更确切的说是逐一访问容器内元素的方法。
Scala继承一个基类跟Java很相似, 但需要注意:
1、重写一个非抽象方法必须使用override修饰符。
2、只有主构造函数才可以往基类的构造函数里写参数。
3、在子类中重写超类的抽象方法时,不需要使用override关键字。
Scala 使用 extends 关键字来继承一个类。
Scala 只允许继承一个父类。
Scala重写一个非抽象方法,必须用override修饰符。
在 Scala 中,是没有 static 的,但是提供了单例模式的实现方法,就是使用关键字 object。
Scala 中使用单例模式时,除了定义的类之外,还要定义一个同名的 object 对象,它和类的区别是,object对象不能带参数。
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员。
Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。
与接口不同的是,它还可以定义属性和方法的实现。
一般情况下Scala的类只能够继承单一父类,但是如果是 Trait(特征) 的话就可以继承多个,从结果来看就是实现了多重继承。
Trait(特征) 定义的方式与类类似,但它使用的关键字是 trait
trait Equal {
def isEqual(x: Any): Boolean
def isNotEqual(x: Any): Boolean = !isEqual(x)}
isEqual 方法没有定义方法的实现,isNotEqual定义了方法的实现。子类继承特征可以实现未被实现的方法。所以其实 Scala Trait(特征)更像 Java 的抽象类。
Scala 提供了强大的模式匹配机制,应用也非常广泛。
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
使用了case关键字的类定义就是就是样例类(case classes),样例类是种特殊的类,经过优化以用于模式匹配。
Scala 通过 scala.util.matching 包种的 Regex 类来支持正则表达式
import scala.util.matching.Regexobject Test { def main(args: Array[String]) { val pattern = "Scala".r val str = "Scala is Scalable and cool" println(pattern findFirstIn str) } }
Scala 的正则表达式继承了 Java 的语法规则。
Scala 的异常处理和其它语言比如 Java 类似。
Scala 的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。
Scala 抛出异常的方法和 Java一样,使用 throw 方法
throw new IllegalArgumentException
异常捕捉的机制与其他语言中一样,如果有异常发生,catch字句是按次序捕捉的。因此,在catch字句中,越具体的异常越要靠前,越普遍的异常越靠后。 如果抛出的异常不在catch字句中,该异常则无法处理,会被升级到调用者处。
捕捉异常的catch子句,语法与其他语言中不太一样。在Scala里,借用了模式匹配的思想来做异常的匹配,因此,在catch的代码里,是一系列case字句。
finally 语句用于执行不管是正常处理还是有异常发生时都需要执行的步骤。
Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。
Scala 进行文件写操作,直接用的都是 java中 的 I/O 类 (java.io.File):
import java.io._object Test { def main(args: Array[String]) { val writer = new PrintWriter(new File("test.txt" )) writer.write("文件") writer.close() } }
从文件读取内容可以使用 Scala 的 Source 类及伴生对象来读取文件。
安装spark和sbt的截图: