大数据系列修炼-Scala课程23

大数据系列修炼-Scala课程23

核心内容:
1、scala中高阶函数代码实例
2、高阶函数代码实战详解

1、scala中函数的相关概念

1>函数是scala中的一等公民,所以函数可以保存在其它变量中,函数可以像普通的变量或者常量一样作为参数传递给我们的函数
2>在scala中,你无法直接操纵方法,而只能直接操纵函数,对于函数可以做两件事情:1调用 2传递
3>在scala中,若要让编译器识别出某个标识符是函数,需要借助于占位符
4>函数的类型,其实就是输入输出的类型

实例程序:

package IT05
import scala.math._
object App6 
{
   def main(args:Array[String]):Unit=
   {
     //scala中的函数可以做两件事情:调用和传递
      val fun = ceil _  //将方法转化成了函数
      val num = 3.14
      println(fun(num)) //调用函数
      val arr = Array(1.42,3.14,2.0).map(fun)  //将fun作为参数进行传递
      for(ele<- arr) println(ele)
   }
}

运行结果:

4.0
2.0
4.0
2.0
2、scala中的高阶函数

scala中的高阶函数主要有两种:
1>将一个函数作为参数的函数称为高阶函数
2>将一个返回值是函数的函数称为高阶函数

实例程序1:将一个函数作为参数的函数称为高阶函数

object App6 
{
   def main(args:Array[String]):Unit=
   {
     //高阶函数的第一种类型:将一个函数作为参数的函数
     def high_order_function(f:(Double)=>Double)=f(0.25) println(high_order_function(ceil _)) //1.0 println(high_order_function(sqrt _)) //0.5 } }

实例程序2:将一个返回值是函数的函数称为高阶函数

object App6 
{
   def main(args:Array[String]):Unit=
   {
     //高阶函数的第二种类型:将一个返回值是函数的函数称为高阶函数
     def mulBy(factor:Double)=(x:Double)=> factor * x
     val bb = mulBy(2.0)
     println(bb(3.0))
   }
}
3、匿名函数的一些常见规则

1>对于无参或只有一个参数的匿名函数,可以省略掉()
2>如果参数在=>的右侧只出现一次,则可以用占位符进行替换
3>在高阶函数中,可以将函数包在()里,也可以包在{}里

实例程序:

object App6 
{
   def main(args:Array[String]):Unit=
   {
      def high_order_function(f:(Double)=>Double)=f(0.25) println(high_order_function((x:Double)=>x+3.0)) //3.25 println(high_order_function((x)=>x+3.0)) //scala中的类型推断机制 println(high_order_function((x)=>x+3.0)) //对于只有一个参数的匿名函数,可以省略掉() println(high_order_function(_+3.0)) //如果参数只在=>右侧出现一次,则可以用_进行替换
   }
}

运行结果:

3.25
3.25
3.25
3.25

如有问题,欢迎留言指正!

你可能感兴趣的:(scala,大数据)