package PXL.basics
import 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,使用:_*变成可以传入的形式
}
}
Scala函数式编程(一)
猜你喜欢
转载自blog.csdn.net/cufe_eric/article/details/78895601
今日推荐
周排行