gpt4 book ai didi

php - 在没有代码生成的情况下定义匿名函数的元数

转载 作者:可可西里 更新时间:2023-11-01 00:45:32 24 4
gpt4 key购买 nike

可以通过使用反射来确定一个函数接受多少个参数。

我希望能够定义一个执行函数组合的函数 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

有没有办法在不使用 eval 和其他代码生成技术的情况下更改 PHP 反射系统看到的匿名函数的参数数量?

最佳答案

当您将 func_get_args() 引入函数时,任何能够确定其真正元数的希望都将失效。此时,元数实际上仅由函数的逻辑定义,不能通过反射或静态代码分析来确定。

我之前写过一个类似于 compose 的实现,但它只是假设你正在组合的函数的元数都是 1。

关于php - 在没有代码生成的情况下定义匿名函数的元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com