6. 级联表达式和柯里化

作者: HmilyMing | 来源:发表于2019-01-30 07:56 被阅读0次

柯里化:有多个箭头的 lambda 表达式,把多个参数的函数转换为只有一个参数的函数。
例如:

x -> y -> x + y 

这样子的。

可以这样理解:输入了 X 返回了 (y -> x + y), 再拆,输入了 y 返回了 x + y。

所以可写成:

Function<Integer, Function<Integer, Integer>> fun =  x ->y -> x + y;  

如上,这就是级联表达式。

继续刚才的代码,使用

System.out.println(fun.apply(2).apply(3)); 

来调用,运行输出结果 5。

柯里化的意义: 把函数标准化。

柯里化后,所有的函数都只有一个参数,调用起来就比较灵活,可以使用一些灵活的特性,比如把函数组合起来,

做过前端的同学可能会遇到过这个题目:

实现 var a = add(2)(3)(4);  // 9

我们在 Java 里面可以这么做:

Function<Integer, Function<Integer, Function<Integer, Integer>>> fun2 = x -> y -> z -> x + y + z;
System.out.println(fun2.apply(2).apply(3).apply(4));

还可以这样做:

int[] nums = {2, 3, 4};
Function f = fun2;
for (int i = 0; i < nums.length; i++){
    if (f instanceof Function){
        Object obj = f.apply(nums[i]);
        if (obj instanceof Function){
            f = (Function) obj;
        } else {
            System.out.println(" end: " + obj);
        }
    }
}

这就是高阶函数:返回函数的函数。

代码地址: https://github.com/hmilyos/lambda-demo.git

相关文章

  • 6. 级联表达式和柯里化

    柯里化:有多个箭头的 lambda 表达式,把多个参数的函数转换为只有一个参数的函数。例如: 这样子的。 可以这样...

  • lambd 级联表达式和柯里化

    Function >> fun = x -> y -> z -> x+y+z; // 级联表达式 fun.app...

  • 简单理解JavaScript中的柯里化和反柯里化

    简单理解JavaScript中的柯里化和反柯里化 前言 本文旨在让大家简单理解柯里化和反柯里化,这里不做深入探究,...

  • 简单理解JavaScript中的柯里化和反柯里化

    简单理解JavaScript中的柯里化和反柯里化 前言 本文旨在让大家简单理解柯里化和反柯里化,这里不做深入探究,...

  • 柯里化和反柯里化

    一、柯里化 定义函数柯里化就是把一个函数中的一些可以固定的参数固定后生成新的函数比如一个函数: 现在有一个需求:就...

  • JavaScript

    JavaScript高级函数 惰性函数 函数柯里化 级联函数(链式函数) 设计模式 单例模式 构造函数模式 工厂模...

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 函数的柯里化和反柯里化

    一 柯里化(currying) 柯里化(currying)又称部分求值。一个currying的函数首先会接受一些参...

  • 前端 js 柯里化和反柯里化

    函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家H...

  • JS函数柯里化和反柯里化

    非淡泊无以明志,非宁静无以致远。正定聚! 柯里化 概述: 在计算机科学中,柯里化(Currying)是把接受多个参...

网友评论

    本文标题:6. 级联表达式和柯里化

    本文链接:https://www.haomeiwen.com/subject/zxopjqtx.html