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)
}
}