nemorize/curried

此包已被弃用,不再维护。未建议替代包。

一个创建柯里化函数的工具,其参数按用户定义的顺序重新排列。

0.0.1 2023-02-17 03:19 UTC

This package is auto-updated.

Last update: 2024-02-17 05:34:10 UTC


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