我试图实现一个递归的容器式结构,我可以理解为什么一个vanilla循环typedef是不可能实现的,但为什么以下不允许呢?
typedef cycle = shape('cycle' => ?cycle); // Cyclic typedef (Typing[4014])
创建一个似乎很容易:
$cycle = shape('cycle'=>shape('cycle'=> /* shape(... =>*/ null /* ...) */));
迭代一个应该没有问题,对吗?
function recurse(cycle $cycle) {
if(!is_null($cycle['cycle'])) recurse($cycle['cycle']));
}
答案 0 :(得分:2)
为feature request you mention添加更多颜色。据我所知,没有根本原因,形状不能像你建议的那样工作。在某些情况下它甚至会有用。这完全是一个实现问题 - 至少在我上次熟悉类型检查器代码的时候,它实际上很难实现。 (同样,不是出于任何有趣的原因,只是代码编写时对如何扩展形状进行了深刻的假设。)也就是说,自从我上次看到这个以来,形状在一定程度上发生了一些变化,并且可能现在比较容易,我不知道。但是这个功能从来都不是非常重要,值得付出努力来构建 - 也许现在或将很快与上述形状更新现在它们的使用范围更广泛(特别是FB)。
答案 1 :(得分:0)
自去年以来,它目前是a feature-request
on facebook/hhvm。