Scala函数式编程(一)
来源:互联网 发布:淘宝手机端卖家中心 编辑:程序博客网 时间:2024/05/18 00:18
package PXL.basicsimport sun.security.util.Length/*** * 使用Alt + /可以自动补全 * def 后面就可以看成函数 * 函数是一等公民,可以像变量一样被传递,被赋值;并且函数和变量之间可以赋值传递,可以把函数当成一个变量 * 函数可以被序列化和反序列化 * 1. 函数可以在分布式系统上传递 * 2. 背后是类和对象,可以如变量一样做任何事情 * 关于函数的几个要点: * 1. def关键字定义 * 2. 函数自动进行类型推断,最后一条语句 * 3. 如果函数名称和函数体之间没有等于号= 则函数类型推断失效,此时类型为Unit * 4. 如果函数体中无法推到出函数的类型,必须声明具体的类型 ,例如fib函数 * 5. 函数的参数可以有默认值 * 6. 函数不确定传入的参数个数,使用变长的方式(num:Int*) * 7. 可以使用1 to 10 : _*的方式传入参数 * 8. 可变参数会被收集成为数组,入口函数main的可变参数是以Array[String]方式呈现的 * */object function001 { def main(args: Array[String]): Unit = { hello("spark",23) println(hello("pxl",23))//函数可以作为参数(变量传递给函数) println("fib num of 10 is "+fib(10)) println("sum = "+sum( 1 to 10 : _* )) println("sumall = "+sumall( 1 to 10 : _* )) } def hello(name:String,age:Int)={ println("my name is : "+name) println("my age is : "+age) age//此时函数返回的类型为int } def fib(n:Long):Long={ if(n<=1) 1 else fib(n-2)+fib(n-1) } def sum(num:Int*)={ var result = 0 for (nu<-num) result += nu//加号和等号不可以有空格 result //没有这句的话不返回任何值 } //可变参数递归实现累加 def sumall(num:Int*):Int = { if (num.length==0) 0 else num.head + sumall(num.tail: _*)//tail其余的元素是一个seq,使用:_*变成可以传入的形式 }}
阅读全文