scala 入門開發一
阿新 • • 發佈:2018-12-25
scala 是基於jvm虛擬機器的一門語言,介紹就不說了 直接上程式碼吧
學習scala是為了看spark程式碼 目前spark 只支援2.1X系列的
我這裡學習的是使用的2.10.5 開發工具是eclipse scala版本
object BasicsCode { def main(args: Array[String]): Unit = { //JOKE println(str()) //6 println(add(1,2,3)) //12 println(add2(3,9)) //10 println(add3(2)) println("fac:"+fac(5)) println("mulitply:"+mulitply(2)(6)) println("m2:"+m2(2)) println("t:"+t()) println("testfunc02:"+testfunc02(t)) println("d1:"+d1(5)) println("testf1:"+testf1((a:Int,b:Int)=>{a*b})) println("testf1:"+testf1(add2)) println("add4:"+add4(1,2,3)) def sumInts = sum( x => x) println("sumInts:"+sumInts(1,3)) } //直接賦值 返回出去 def str(name : String = "JOKE")={name} //* 多個引數 遍歷引數 def add(sum : Int*)={ var a = 0 for(s <- sum){ a += s; } a } //先定義變數名 再定義型別 def add2(a:Int,b:Int) =a+b //下劃線在這裡代表一個引數名 起名難問題 def add3 = add2(_ : Int ,8) //f(n) = f(n)*f(n-1) 遞迴 需要給出返回的型別 def fac(n:Int):Int = if(n<=0) 1 else n*fac(n-1); // 函式柯里化 //就是說定義 把這個引數一個個獨立開來寫 def mulitply(x:Int)(y:Int) = x*y //使用下劃線 def m2 = mulitply(2)_; // => 匿名函式宣告方式 val t = ()=>333//聲明瞭一個函式物件付給了t // :後面是資料型別,c代表傳進來的引數 傳一個匿名函式進來 返回這個匿名函式 def testfunc02(c : ()=>Int ) = { c() } // 匿名函式 val d1 = (a:Int)=> a+100; // 匿名函式作為引數,其實就是引數名,後面跟上引數型別,然後是表示式 //作用是傳入表示式 改函式負責提供具體資料 def testf1(callback : (Int,Int)=>Int )={ callback(123,123); } //巢狀函式, def裡面套一個def def add4(x:Int, y:Int ,z:Int) : Int = { def add2(i:Int, j:Int):Int = { i + j } add2(add2(x,y),z) } // 匿名函式 加遞迴 def sum(f : Int => Int) : (Int , Int) => Int = { def sumF(a : Int , b : Int) : Int = if (a >b ) 0 else f(a) + sumF( a + 1 , b) sumF } //==================================================================== }
結果:
二、scala 中 Collection 的使用
具體看程式碼中註釋package org.zw.test object TestCollection { def main(args: Array[String]) { var t = List(1,2,3,5,5) //下標從0 // println(t(2)) // map 個位置相加 函式程式設計 // println(t.map(a=> { // //遍歷每個元素 // print("***"+a); // //每個值加2 // a+2}) // ); //簡潔版 // println(t.map(_+1)); var t2 = t.+:("test");//新增元素 // println(6::t2);//一起列印 並沒有放入進去 // println(t2); // t2 = t::6::Nil;//組成新的List t作為一個元素 // println(t2); // t2.foreach(t=>print("---+++"+t)) // println("") // println(t2); //遍歷 // t2.foreach(println(_)) //去重 // println(t.distinct) //從多少到多少的數字 // println(t.slice(0, 2)) // println("-*--*--*--*--*--*--*--*--*-") //遍歷 // for(temp<-t2){ // print(temp) // } // println() // println("-*--*--*--*--*--*--*--*--*-") // for(i <- 0 to t2.length-1){ // print("--->i:"+i+" , ") // print(t2(i)) // } // println("-*--*--*--*--*--*--*--*--*-") //對這個集合 操作 從0 開始 累加上集合裡面的值 //0--1 1--2 3--3 6--5 11--5 16 //3+1 4+2 6+3 9+5 14+5 19 // println(t./:(3)({ // (sum,num)=> // print(sum+"+"+num+" "); // sum+num // })); // 1,2,3,5,5 //集合裡的值相加 var vl = List(5,5,2,0) // println(vl.reduce(_+_)) // println(vl.reduce((x,y)=> { // println(x+","+y); // x+y // } // )) // println("-*--*--*--*--*--*--*--*--*-") // println(t.foldLeft(10)((sum,num)=>{print(sum+"--"+num+" "); // num+sum; // })); // println("-*--*--*--*--*--*--*--*--*-") // println(t.map(v =>{println(v);v+2 })); // println(t.map(v =>v+2)); println("-*--*--*--*--*--*--*--*--*-") // 元組 定義以後不能改變 下標從1開始 var tuple01 = (1,5,6,6); println(tuple01._1) println(tuple01._3) } }