package basics object fuctionalPrograming { def main(args: Array[String]): Unit = { //1.函数和变量一样作为scala语言的一等公民,函数可以直接赋值给变量 val hidata= hibigdata _ hidata("spark") /* 2.幻术更常用的方式是匿名函数,定义的时候说明输入参数的类型和函数体即可, * 不需要名称,但是如果你要使用的话,一般会把这个匿名函数赋值给一个变量 * */ //匿名函数 val f=(name:String)=>{println("his "+name)} //f("kafa") //函数可以作为参数直接传递给函数, // 第一:以前java的方式是new出一个接口实例,并在接口实例 // 的回调方法中来实现业务逻辑,现在是直接把回调方法传递给我们的函数,且在函数体中直接使用,简化了代码的编写 //提升了开发效率,这种方式 //第二:这种方式非常方便编写负责的业务逻辑和控制逻辑 def getName(func:(String)=>Unit,name:String){ func(name) } getName(f, "java") Array(1 to 10:_*).map{(item:Int)=>2*item}.foreach{x=>println(x)} //函数返回值可以是一个函数(name:String)=>println(msg+" his "+name)作为返回值返回 //当函数返回类型是个函数的时候,这个时候就表明sacla的函数实现了闭包 //闭包的内幕是:scala的参数都是类和对象,scala的参数都做为了对象,所以后续可以继续访问 def funcresult(msg:String)=(name:String)=>println(msg+" his "+name) // def funcresult(msg:String,name:String){println(msg+" his "+name)} funcresult("hi")("job")//等同于下面代码,Currying函数写法(柯里化写法)这就是高阶函数的写法 val result=funcresult("hi") result("job") } def hibigdata(name:String){ print("hi "+name) } }
运行结果:
hi sparkhis java 2 4 6 8 10 12 14 16 18 20 hi his job hi his job