Что такое каррирование и частичное применение функции можно прочитать здесь статья .
Собственно вот реализация на PHP: github.com/Эльфет/Функциональный Пример использования частичного применения:
Вы также можете использовать именованные параметры:use Functional\Partial; function foo($a, $b, $c) { return "foo<$a, $b, $c>\n"; } $p = Partial::apply('foo', 1, 2); echo $p(3); // foo<1, 2, 3>
$p = Partial::applyNamed('foo', array('a' => 1, 'c' => 3));
echo $p(2); // foo<1, 2, 3>
Вы можете установить значения по умолчанию:
$p = Partial::apply(function ($a, $b, $c = 'c') {
return "function()<$a-$b-$c>\n";
}, 1);
echo $p(2); // function()<1-2-c>
Или добавьте параметры позже:
class Boo
{
public function woo($a, $b, $c)
{
return "Boo::woo<$a, $b, $c>\n";
}
}
$p = Partial::apply(array($boo, 'woo'));
$p->applyArgs(1, 2);
$p->applyNamedArgs(array('b' => 3));
echo $p(); // Boo::woo<1, 3, 2>
Пример каррирования:
use Functional\Curry;
function foo($a, $b, $c)
{
return "foo<$a, $b, $c>\n";
}
$c = new Curry('foo');
echo $c->invoke(1)->invoke(2)->invoke(3); // foo<1, 2, 3>
Или используйте сокращенный синтаксис:
echo $c[1][2][3]; // foo<1, 2, 3>
Теги: #php #curry #частичное применение #php
Вместе с данным постом часто просматривают:
-
Нспк: Жертвы И Победители
19 Oct, 24 -
Как Мы Выгоняли Наркоторговцев Из Рунета
19 Oct, 24