Scala 函数式编程进阶 2 更详 代码说明

package com.xing.listfile

/**
  * Created by DengNi on 2017/2/11.
  */
object functionalProgramming {

  def main(args: Array[String]) {
    // 把函数赋值给一个变量
    val hs = helloSpark _  //此处应该是一个不可变量,但是如果是可变的话 也可以运行  但是代码中会提示不可变 val
    hs("spark")
    //def fhs(name :String) = helloSpark _  // 把一个函数赋值给另外一个函数 ,这样子结果好像不对,不是赋值 ,是返回值
    def fhs(name :String) = helloSpark(name)  //这个对 ,原理 ??? 这个说明的是函数的返回值是一个函数 ,而不是赋值
    fhs("fhs")
    //函数中更常用的是 匿名函数
    val hsn = (name:String) => println("hi , my name is " + name )
    hsn("spark")

    def sellOrder() = (name:String) => println("hi , my name is " + name ) // 这么写是对的 ,但是不能解释是不是最优 ,应该没有问题
    sellOrder()("sparkQq")

    def lineItem(message:String) = (name:String) => println("hi , my name is " + name +message) // 这么写是对的 ,但是不能解释是不是最优 ,没有问题
    lineItem("hi")("sparkQWES") //这就是currying

    val onlyLineItem = lineItem("hello") //currying  也可以分步写成这种格式
    onlyLineItem("sparkQWES")

    //函数可以作为参数传递给另外一个函数 ,当参数的函数也需要在其它地方定义好

    def myFunction(f:(String) => Unit , name :String): Unit ={
      f(name)
    }
    myFunction(functionSo,"nameSpark")
    def functionSo(name :String): Unit ={   //但是如果给出一个函数参数的名字 了 ,其实就没有必要这么做了 ,一般我们都是匿名函数给一个变量
      println("name pass fun to fun "  + name)
    }

    val valSO = (name:String) =>  println("name pass fun to fun val so "  + name) //就像上面说的 ,更多是这么操作
    myFunction(valSO,"nameSpark")


  }

  def helloSpark(name:String): Unit ={
    println("hi, " + name)
  }

}





posted @ 2017-02-11 09:31  yuerspring  阅读(81)  评论(0编辑  收藏  举报