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