柯里化函数
摘要:柯里化函数 柯里化(Currying)是函数式编程中的一种重要技术,它将一个接受多个参数的函数转换为一系列接受单个参数的函数。通过柯里化,可以实现部分应用参数、延迟执行以及函数组合等高级功能。...
柯里化函数
柯里化(Currying)是函数式编程中的一种重要技术,它将一个接受多个参数的函数转换为一系列接受单个参数的函数。通过柯里化,可以实现部分应用参数、延迟执行以及函数组合等高级功能。
目录
定义
柯里化是将一个多参数函数转换为一系列单参数函数的过程。例如,一个接受两个参数的函数 f(a, b),经过柯里化后变为 f(a)(b) 的形式。
核心特点
- 参数分解:将多参数函数分解为单参数函数链。
- 部分应用:固定部分参数,生成新的函数。
- 延迟执行:只有在所有参数都传递完毕后,才会执行原函数。
简单使用
示例:两数相加
假设有一个简单的加法函数:
function add(a, b) {
return a + b;
}
通过柯里化,可以将其转换为:
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function (...args2) {
return curried.apply(this, args.concat(args2));
};
}
};
}
const curriedAdd = curry(add);
console.log(curriedAdd(2)(3)); // 输出: 5
解释
curry函数将add转换为柯里化形式。curriedAdd(2)返回一个新函数,等待第二个参数。curriedAdd(2)(3)最终执行加法并返回结果。
高阶使用
1. 部分应用
柯里化允许固定部分参数,生成新的函数。例如:
const add2 = curriedAdd(2); // 固定第一个参数为 2
console.log(add2(3)); // 输出: 5 (2 + 3)
console.log(add2(5)); // 输出: 7 (2 + 5)
2. 动态生成函数
柯里化可以根据条件动态生成函数。例如:
const greet = curry((greeting, name) => `${greeting}, ${name}!`);
const greetHello = greet("Hello");
console.log(greetHello("Alice")); // 输出: Hello, Alice!
console.log(greetHello("Bob")); // 输出: Hello, Bob!
应用场景
1. 参数复用
柯里化可以预先固定部分参数,生成更专用的函数。例如,API 请求的基地址可以固定:
const fetchData = curry((baseUrl, endpoint) => {
return fetch(`${baseUrl}/${endpoint}`);
});
const fetchFromAPI = fetchData("https://api.example.com");
fetchFromAPI("users"); // 请求: https://api.example.com/users
fetchFromAPI("posts"); // 请求: https://api.example.com/posts
2. 延迟执行
柯里化可以延迟函数的执行,直到所有参数都传递完毕。例如:
const log = curry((level, message) => {
console.log(`[${level}] ${message}`);
});
const logError = log("ERROR");
logError("Something went wrong!");
本文链接:https://blog.smallhao.fun/?id=13 转载需授权!
Chen’Blog版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!