scala 入门开发一

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)
		
	}
}
具体看代码中注释 

猜你喜欢

转载自blog.csdn.net/u010982856/article/details/52869617
今日推荐