scala入门

来源:互联网 发布:疯狂的美工助手破解版 编辑:程序博客网 时间:2024/05/01 20:53

近期玩儿spark,遇见了不少scala的小问题,先将其小语法做了整理,雅俗共享之

一、

其声明类使用object

1、 循环的使用

  def main1(args: Array[String]) {    var a = 0    for (a <- 1 to 10) {      println("hello  " + a);    }  
2、list循环
  def main2(args: Array[String]) {    var a = 0    var list = List(1, 2, 3, 4, 5, 6, 7) //集合    for (a <- list) {      println(a)    }  }

3、循环和筛选

  def main3(args: Array[String]) {    var a = 0    var list = List(1, 2, 3, 4, 5, 6, 7) //集合    for (a <- list; if a != 6; if a > 1) { //筛选      println(a)    }  }
4、yield记住每次迭代中的有关值,并逐一存入到一个数组或者集合中

  def main(args: Array[String]) {    var a = 0    var itList = List(1, 2, 3, 3, 4, 5)    for (a <- itList) {      println(a)    }  }}
二、函数调用
1、又返回值的函数调用     :Int= (int类型)

  def add(a:Int,b:Int):Int=  //函数有返回值时,必须显示之指明返回值类型  {    var sum :Int=0  // 等价于 var sum=0     sum=a+b    return sum  }  def main1(args:Array[String]){    println(add(1,4))  }
2、柯西化函数--字符串拼接

  def strcat(s1:String)(s2:String)(s3:String)=  //注:返回值为字符串  {    s1+s2+s3  }  def main2(args:Array[String]){    var str1="helloo"    var str2="china"    println(strcat(str1)(str2)(str1))  }
3、柯西化函数  以下两者作用效果相同
  def addy(x:Int)(y:Int)=x+y    def addx(a:Int,b:Int):Int =  {    var sum:Int=0    sum=a+b    return sum  }      def main3(args:Array[String]){    println(addx(2,3))    println(addy(3)(4))  }
4、匿名函数--匿名函数的两种形式,左边都是参数,右边是函数体

(1)

  def main4(args:Array[String]){    var d1=(x:Int,y:Int)=>x+y+3   //匿名函数参数可以多个          println(d1)  //<function1>     println(d1(2,3)) //     println(d1())  //没有这种形式,会报错  }
(2)

  def main5(args:Array[String]){    var d2=new Function[Int,Int]  //小写不行    {      def apply(x:Int):Int=x+1    }        println(d2)    println(d2(4))    }
小结:
 var d1=(x:Int,y:Int)=>x+y+3   //匿名函数参数可以多个

    var d2=new Function[Int,Int]     {      def apply(x:Int):Int=x+1    }

实战

  def main6(args:Array[String]){    var d3=(x:Int,y:Int)=>x+y    var d4=(x:Int,y:Int,k:Int)=>x+y+k    var dir=()=>println(System.getProperty("user.dir"))//打印当前目录        dir()     println(d3(1,5))     println(d4(1,4,5))     println(d3)  //<function2>     println(d4)  //<function3>     println()  }

三、一些比较奇怪而且很棒的效果

1、可变参数,处理流式数据

  def printk(args:String*)//可变参数  {    var i:Int=0  //定义一个int类型    for(arg<-args)    {      println(i+"  "+arg)      i+1    //没有i++    }  }//  默认值--当没有传递参数时,使用默认值   def printx(a:Int=4,b:Int=2,c:Int=1){      println(a+b+c)    }     def main7(args:Array[String]){       printk("1a","2b","3c","jj")              printx()       printx(1)       printx(1,1)       printx(1,1,1)          //7 4 3 3      }
2、内嵌函数--函数中放函数

    def main8(args:Array[String]){      def it()      {        println("hello")      }      it()      //最后要调用一下    }
3、高阶函数--把函数当做参数,函数可以当做另一个函数的参数

    def app( i:Int=>String  , v:Int)=i(v)        def putout[Int](x:Int)=x.toString()    def putout2[Int](x:Int)=(x).toString()+"ab"    //A模板    def putot[A](x:A)=x.toString()        def main9(args:Array[String]){       println(app(putout,22))  //22       println(app(putout2,32)) //32ab       println(app(putot,42))   //42    }
4、递归调用
    def add100(n:Int):Int=    {      if(n<=1)      {        1      }      else      {        n+add100(n-1)      }    }        def go(a:Int)    {      println(a)    }    def main(args:Array[String])    {      go(a=3)  // //给指定参数赋值  b=3不行 只能是a      println(add100(100))    }

0 0