我有以下代码(用于部分应用):
function partial(Closure $func, mixed ...$args): Closure
{
return static fn() => $func(...$args, ...func_get_args());
}
function add(int $a, int $b): int
{
return $a + $b;
}
$increment = partial(add(...), 1);
echo $increment(2); // Output: 3
我想用显式构建的数组替换func_get_args
,但我没有成功将其用作函数的参数:
function partial(Closure $func, mixed ...$args): Closure
{
return static fn() => $func(...$args, ...[ $func, ...$args ]);
}
function add(int $a, int $b): int
{
return $a + $b;
}
$increment = partial(add(...), 1);
echo $increment(2); // Fatal error: Uncaught TypeError: add(): Argument #2 ($b) must be of type int, Closure given
我向partial添加了调试行,以查看显式构建的数组是否等于给定buy func_get_args
的数组,事实是这样的:
function partial(Closure $func, mixed ...$args): Closure
{
echo func_get_args() === [ $func, ...$args ]; // Output: 1
// or for the whole argument list handed over to $func:
echo [ ...$args, ...func_get_args() ] === [ ...$args, ...[ $func, ...$args ] ]; // Output: 1
return static fn() => $func(...$args, ...[ $func, ...$args ]); // Crashes anyway
}
两条测试线都表明它们是平等的.因此,我不明白为什么它可以与用func_get_args
构建的参数一起工作,并且在使用显式构建的数组时崩溃.