phpfn / curry
函数柯里化和偏应用的便捷实现
2.0.1
2020-08-09 03:10 UTC
Requires
- php: >=7.4
- symfony/polyfill-php80: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-06 05:34:58 UTC
README
函数柯里化和偏应用的便捷实现。
安装
库可以被安装到任何PHP应用程序中
$ composer require phpfn/curry
为了访问库,请确保将 vendor/autoload.php
包含在您的文件中。
<?php require __DIR__ . '/vendor/autoload.php';
用法
左柯里化
左柯里化可以理解为向数组中添加参数。然后将这个参数数组应用到函数上。
左柯里化从第一个参数返回部分应用函数。
$fn = \curry(function($a, $b) { return $a + $b; }); $fn(3); // ($a = 3) + ($b = ?) $fn(3)(4); // ($a = 3) + ($b = 4)
右柯里化
同时,右柯里化可以理解为向右侧添加参数。
$fn = \rcurry(function($a, $b) { return $a + $b; }); $fn(3); // ($a = ?) + ($b = 3) $fn(3)(4); // ($a = 4) + ($b = 3)
偏应用
偏应用是指可以指定完全随机的参数,跳过不必要的使用占位符 _
。
$fn = \curry(function($a, $b, $c) { return $a + $b * $c; }); $fn = $fn(_, 3, 4); // ($a = ?) + ($b = 3) * ($c = 4) echo $fn(42); // ($a = 42) + ($b = 3) * ($c = 4)
$fn = \curry(function($a, $b, $c) { return $a + $b * $c; }); $fn = $fn(_, 3, _); // ($a = ?) + ($b = 3) * ($c = ?) $fn->lcurry(42); // ($a = 42) + ($b = 3) * ($c = ?) $fn->rcurry(23); // ($a = ?) + ($b = 3) * ($c = 23)
$fn = \curry(function($a, $b, $c) { return $a + $b * $c; }); $sum = $fn(7, 9); // 7 + 9 * ? $sum(6); // 7 + 9 * 6 $mul = $fn(_, 7, 9); // ? + 7 * 9 $mul(6); // 6 + 7 * 9 $test = $fn(_, 7, _); // ? + 7 * ? $test(6); // 6 + 7 * ? $test = $fn(_, 7); // ? + 7 * ? $test->rcurry(6); // ? + 7 * 6
API
函数
lcurry(callable $fn, ...$args): Curried
或curry
左柯里化(类似于数组推送参数)
rcurry(callable $fn, ...$args): Curried
右柯里化
uncurry(callable $fn): mixed
返回结果或部分应用函数
Curried
$fn->__invoke(...$args)
或$fn(...$args)
允许对象转换为可调用类型的魔术方法
$fn->lcurry(...$args)
返回一个新的具有左柯里化的函数的方法
$fn->rcurry(...$args)
返回一个新的具有右柯里化的函数的方法
$fn->reduce()
函数组合的归约。也就是说,将函数归约到单个值——该函数的结果。
$fn->uncurry()
尝试进行归约,或将函数归约到另一个,这将返回结果
$fn->__toString()
只是一个函数转储