10,插播 java8-λ,引出currying

2020-06-11  本文已影响0人  r8HZGEmq
java 8:
闭包,允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理


 public class Java8Tester {
    public static void main(String[]args){
        MathOperation addition = (int a, int b) -> a + b;
        MathOperation subtraction = (int a, int b) -> a - b;

        Java8Tester java8 = new Java8Tester();

        int res1 = java8.operation(1, 2, addition);
        int res2 = java8.operation(1, 2, subtraction);
        System.out.println("-----> : " + res1);
        System.out.println("-----> : " + res2);

    }
    interface MathOperation{
        int operation(int a, int b);
    }
    int operation(int a, int b, MathOperation operater) {
        return operater.operation(a, b);// 这两个参数,传递给实现函数
    }
}
java8 lambda的语法糖
currying将一系列多参数,改成单参数的形式
柯里化棒在哪里。(1,提高性能吗?no   2,模块化?yes)
let add = function(a, b){return a+b} // 参数传多了会被忽略,传少了会报NaN


任何新技术的引出,必定是为了解决一个现有的问题
调用SDK里的api1('id',p2,p3), api2('id',p4,p5), api3('id','sn',p6,p7)
抽象为:
1,将需要调用的api(一个函数)作为第1个参数传入
2,然后固定住部分不变的参数
3,然后返回新的函数
functionN(fn){
  return (x) -> {
    return (y) -> {
        fn(x, y, ....., N)
      }
  }
}


上一篇下一篇

猜你喜欢

热点阅读