nemorize / curried
此包已被弃用,不再维护。未建议替代包。
一个创建柯里化函数的工具,其参数按用户定义的顺序重新排列。
0.0.1
2023-02-17 03:19 UTC
Requires
- php: >=8.1
README
一个创建柯里化函数的工具,其参数按用户定义的顺序重新排列。
受 https://github.com/andjsrk/create-curried 启发。
要求
- PHP 8.1 或更高版本
安装
composer require nemorize/curried
用法
Curried
Curried::from(Closure $fn): Context
为给定的闭包返回一个 Context
。
use Nemorize\Curried\Curried; $context = Curried::from(function ($foo, $bar) { return $foo . $bar; });
Context
Context::takes(int $position): Context
获取给定位置的参数。
use Nemorize\Curried\Curried; $context = Curried::from(function ($foo, $bar) { return $foo . $bar; })->takes(0)->takes(1);
Context::takesRest(): Context
获取剩余的参数。
use Nemorize\Curried\Curried; $context = Curried::from(function ($foo, $bar, $baz) { return $foo . $bar . $baz; })->takes(0)->takesRest();
Context::withStatic(int $position): Closure
将给定位置的参数绑定到闭包。
返回的闭包返回下一个参数的 Context
。
use Nemorize\Curried\Curried; $context = Curried::from(function ($foo, $bar) { return $foo . $bar; })->takes(0)->withStatic(1)('bar');
Context::generate(): Closure
生成一个柯里化函数。
use Nemorize\Curried\Curried; $curried = Curried::from(function ($foo, $bar) { return $foo . $bar; })->takes(0)->takes(1)->generate(); $curried('foo')('bar'); // 'foobar'
示例
数组每个元素加一
use Nemorize\Curried\Curried; $map = Curried::from(array_map(...)) ->takes(0) ->takes(1) ->generate(); $plusOneEach = $map(fn (int $x) => $x + 1); $plusOneEach([1, 2, 3]); // [2, 3, 4]
数组求和
use Nemorize\Curried\Curried; $sum = Curried::from(array_reduce(...)) ->takes(1) ->withStatic(0)(fn (int $x, int $y) => $x + $y) ->generate(); $sum([1, 2, 3]); // 6