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