Spark学习使用笔记 - Scala篇(1)
2017-12-13 00:00
330 查看
基础
def primitiveType(): Unit = { //scala没有原始类型,都是对象 println("1.toString -> " + 1.toString) //富类型自动转换Int->RichInt再调用to println("1.to(199) -> " + 1.to(199)) println("\"Hello.intersect(\"low\")\" -> " + "Hello".intersect("low")) //a.方法(b) == a 方法 b println("1.to(199) -> " + (1 to 199)) //scala没有++或者-- } def callFunction = { println("sqrt(2) -> " + sqrt(2)) println("pow(2,4) -> " + pow(2, 4)) println("min(3,Pi)" + min(3, Pi)) println("\"jsjsjdaj\".distinct -> " + "jsjsjdaj".distinct) } def applyMethod: Unit = { //字符串字符定位 println("\"hello\"(4) -> " + "hello" (4)) println("\"hello\".apply(4) -> " + "hello".apply(4)) //构建对象常用方法 println("BigInt(\"12344567890\") -> " + BigInt("1234567890")) println("Array(1,2,3,4,5,6,7,8,9,0) -> " + Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)) } def exercise: Unit = { println(pow(sqrt(3.0), 2.0)) println("\"asdasd\" * 3 -> " + ("asdasd" * 3)) println("10 max 2 -> " + (10 max 2)) println("BigInt(\"2\") pow 1024 -> " + (BigInt("2") pow 1024)) println("probablePrime(10, Random) -> " + probablePrime(10, Random)) println("随机文件名:" + BigInt(Random.nextInt()).toString(36)) val str = "abcdefghijklmn" println("str(0) -> " + str(0)) println("str.take(0) -> " + str.take(1)) println("str.reverse(0) -> " + str.reverse(0)) println("str.takeRight(0) -> " + str.takeRight(1)) }
输出:
1.toString -> 1 1.to(199) -> Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199) "Hello.intersect("low")" -> lo 1.to(199) -> Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199) sqrt(2) -> 1.4142135623730951 pow(2,4) -> 16.0 min(3,Pi)3.0 "jsjsjdaj".distinct -> jsda "hello"(4) -> o "hello".apply(4) -> o BigInt("12344567890") -> 1234567890 Array(1,2,3,4,5,6,7,8,9,0) -> [I@2bc7c6c3 2.9999999999999996 "asdasd" * 3 -> asdasdasdasdasdasd 10 max 2 -> 10 BigInt("2") pow 1024 -> 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216 probablePrime(10, Random) -> 811 随机文件名:aa52hj str(0) -> a str.take(0) -> a str.reverse(0) -> n str.takeRight(0) -> n
控制结构和函数
{}块是有值的,值就是最后一个表达式的值;没有值的表达式(比如说赋值类型的)值为Unit
def value = { val a = { val b = 1 b } println("a->" + a) var d = 0 val c = d = 1; println("c -> " + c) }
输出:
a->1 c -> ()
条件表表达式有值,值就是各个分支,缺少分支为Unit,完整分支为所有分支类型
def conditionExpression: Unit = { val cond = 1 val a = if (cond == 1) true else false println(a) } def conditionType: Unit = { val cond = 1 var a = //Unit类型 if (cond == 0) 1 //上面的相当于 a = if (cond == 0) 1 else () val b = //Any类型 if (cond == 2) 1 else "hello" println("a -> " + a) println("b -> " + b) }
输出:
true a -> () b -> hello
scala没有受检异常,throw表达式类型为Nothing
def handleException: Unit = { //scala没有受检异常 //throw表达式类型为Nothing println("---------------------------------------------") val cond = 1 try { val a = if (cond == 0) true else if (cond < 0) throw new IllegalArgumentException("cond is less than 0!") else throw new Exception("cond is larger than 0!") } catch { case e1: IllegalArgumentException => e1.printStackTrace() case e2: Exception => e2.printStackTrace() } finally { println("finally block!") } //对于条件分支,如果一个分支返回throw表达式,那么它的类型就是其他分支的类型 }
输出:
--------------------------------------------- java.lang.Exception: cond is larger than 0! at com.hash.learn.scala.Chapter2.exception$.handleException(exception.scala:21) at com.hash.learn.scala.Chapter2.CMain$.main(CMain.scala:25) at com.hash.learn.scala.Chapter2.CMain.main(CMain.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) finally block!
参数
def parameter: Unit = { //带名参数 def decorate(left: String = "[", middle: String, right: String = "]") = left + middle + right println(decorate(middle = "asd")) //匿名参数 def decorate2(middle: String, left: String = "[", right: String = "]") = left + middle + right println(decorate2("asd")) //变长参数(输入为Seq) def sum(args: Int*) = { var sum = 0 for (i <- args) { sum += i } sum } println(sum(1, 9, 9, 9)) //Range to Seq println(sum(1 to 9: _*)) }
输出:
[asd] [asd] 28 45
循环
def whileLoop: Unit = { var n = 10 while (n > 0) { println(n) n -= 1 } } def forLoop: Unit = { //to 为闭区间 for (i <- 1 to 5) println(i) //until为左闭右开区间 for (i <- 1 until 5) println(i) println("---------------------------------------------") //可以用字符串 for (i <- "abcdefg") println(i) } def advanceForLoop: Unit = { //嵌套循环写在同一行 println("---------------------------------------------") for (i <- 1 to 3; j <- 1 to 3) println("i:" + i + " j:" + j) //可以加条件 println("---------------------------------------------") for (i <- 1 to 3; j <- 1 to 3 if i != j) println("i:" + i + " j:" + j) //可以有中间变量 println("---------------------------------------------") for (i <- 1 to 10; from = i % 3; j <- 1 to from) println("i:" + i + " j:" + j) //for推导式 println(for (i <- 1 to 10) yield i) println(for (i <- 1 to 10) yield i % 3) //推导式生成的集合类型和第一个生成器类型兼容 println(for (i <- "abcdefg"; j <- 1 to 2) yield i) println(for (j <- 1 to 2; i <- "abcdefg") yield i) }
输出:
10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 1 2 3 4 --------------------------------------------- a b c d e f g --------------------------------------------- i:1 j:1 i:1 j:2 i:1 j: 3ff8 3 i:2 j:1 i:2 j:2 i:2 j:3 i:3 j:1 i:3 j:2 i:3 j:3 --------------------------------------------- i:1 j:2 i:1 j:3 i:2 j:1 i:2 j:3 i:3 j:1 i:3 j:2 --------------------------------------------- i:1 j:1 i:2 j:1 i:2 j:2 i:4 j:1 i:5 j:1 i:5 j:2 i:7 j:1 i:8 j:1 i:8 j:2 i:10 j:1 Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1) aabbccddeeffgg Vector(a, b, c, d, e, f, g, a, b, c, d, e, f, g)
相关文章推荐
- Spark学习使用笔记 - Scala篇(2)- 数组
- Spark学习使用笔记 - Scala篇(3)- 对象
- Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析之Scala学习笔记-51
- maven学习笔记:使用eclipse的maven插件创建scala_spark项目
- Spark学习使用笔记 - Scala篇(3)- 映射,元组
- Spark学习使用笔记 - Scala篇(3)- 对象
- Spark学习使用笔记 - Scala篇(3)- 映射,元组
- Spark学习使用笔记 - Scala篇(2)- 数组
- Spark学习使用笔记 - Scala篇(4)- 对象、包
- Spark学习使用笔记 - Scala篇(1)
- Spark学习使用笔记 - Scala篇(5)- 继承
- 第74讲:从Spark源码的角度思考Scala中的模式匹配学习笔记
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用学习笔记
- Scala类型约束代码实战及其在Spark中的应用源码解析之Scala学习笔记-39
- 第47讲:Scala多重界定代码实战及其在Spark中的应用源码解析学习笔记
- 第50讲:Scala中Variance变化点及其在Spark中的应用源码解析学习笔记
- Scala中Variance代码实战及其在Spark中的应用源码解析之Scala学习笔记-40
- Scala中Context Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-36
- Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-34
- 第44讲:Scala中View Bounds代码实战及其在Spark中的应用源码解析学习笔记