Можно определить, сколько аргументов функция принимает с помощью отражения.Определить arity анонимной функции без генерации кода
Я хочу, чтобы определить функцию compose
, которая выполняет функцию композиции. То есть compose($f, $g)
должен создать новую функцию, которая возвращает $f($g($x))
.
У меня есть пример реализации здесь:
function compose()
{
$fns = func_get_args();
$prev = array_shift($fns);
foreach ($fns as $fn) {
$prev = function ($x) use ($fn, $prev) {
$args = func_get_args();
return $prev(call_user_func_array($fn, $args));
};
}
return $prev;
}
При составлении $f
и $g
, $g
может иметь Арность выше 1. Что означает, что он может принимать более одного аргумента. Таким образом, функция, возвращаемая compose($f, $g)
, может также принимать более одного аргумента - она принимает точно такие же аргументы, как $g
.
Проблема с этой реализацией заключается в том, что нет возможности контролировать открытую ясность того, что возвращает compose
. В этом случае это всегда 1
, из-за function ($x) ...
. При попытке определить арность с помощью отражения всегда будет возвращаться 1
, а не $g
.
Есть ли способ изменить количество аргументов анонимной функции, видимой системой отражения PHP, без использования eval
и других методов генерации кода?
Ни в коем случае я знаю – NikiC