Scala学习-3.3柯里化

柯里化 Currying

柯里化(Currying)技术 Christopher Strachey 以逻辑学家 Haskell Curry 命名的(尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的)。它是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。

/**
知识点
1.scala底层支持柯里化技术,柯里化技术来自于函数式编程
可以将接收多个参数的函数转变为接收单一参数的函数
2.通过柯里化,允许用户自建控制结构,使得调用层次更加清晰
*/
object Demo {
  println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
  
  def f1(a:Int,b:Int)={a+b}                       //> f1: (a: Int, b: Int)Int
  
  //柯里化形式
  def f11(a:Int)(b:Int)={a+b}                     //> f11: (a: Int)(b: Int)Int
  
  f11(2)(3)                                       //> res0: Int = 5
 
    //练习1:根据f2,写出其等价的柯里化形式
    def f2(a:Int,b:Int,c:Int)={a+b+c}         //> f2: (a: Int, b: Int, c: Int)Int
    
    def f21(a:Int)(b:Int)(c:Int)={a+b+c}      //> f21: (a: Int)(b: Int)(c: Int)Int
    
    def f22(a:Int,b:Int)(c:Int)={a+b+c}       //> f22: (a: Int, b: Int)(c: Int)Int
    
    def f23(a:Int)(b:Int,c:Int)={a+b+c}       //> f23: (a: Int)(b: Int, c: Int)Int
    
    
    def f3(a:Int,b:Int,f:(Int,Int)=>Int)={f(a,b)}
                                                  //> f3: (a: Int, b: Int, f: (Int, Int) => Int)Int
    
    def f31(a:Int)(b:Int)(f:(Int,Int)=>Int)={f(a,b)}
                                                  //> f31: (a: Int)(b: Int)(f: (Int, Int) => Int)Int
    
    def f32(a:Int)(b:Int,f:(Int,Int)=>Int)={f(a,b)}
                                                  //> f32: (a: Int)(b: Int, f: (Int, Int) => Int)Int
    
    //留意这种形式:其中一组参数都是普通参数,另外一组参数是匿名函数
    //这种形式称为自建的控制结构
    def f33(a:Int,b:Int)(f:(Int,Int)=>Int)={f(a,b)}
                                                  //> f33: (a: Int, b: Int)(f: (Int, Int) => Int)Int
    
    f33(2,3)(_+_)                             //> res1: Int = 5
    f33(2,3)(_*_)                             //> res2: Int = 6
    f33(2,3)((a,b)=>a+b)                      //> res3: Int = 5
    
    
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容