Scala函数式编程(一)

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,使用:_*变成可以传入的形式
  }
}



猜你喜欢

转载自blog.csdn.net/cufe_eric/article/details/78895601