1

我正在尝试实现一个类似容器的递归结构,我可以理解为什么普通循环 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']));
}
4

2 回答 2

2

为您提到的功能请求提供更多颜色. 据我所知,没有根本原因形状不能像你建议的那样工作。在某些情况下它甚至会很有用。这完全是一个实现问题——至少在我上次熟悉类型检查器代码时,它实际上是相当难以实现的。(同样,不是出于任何有趣的原因,只是代码是在对如何扩展形状进行深入假设的情况下编写的。)也就是说,自从我上次看到这个以来,形状在中间一年左右发生了一些变化,它可能现在更容易,我不知道。但它的功能从来都不够重要,以至于值得付出努力来构建——也许现在或即将推出上述形状更新,因为它们的使用范围更广(尤其是在 FB)。

于 2016-05-28T22:34:17.277 回答
0

自去年以来,它目前feature-requestfacebook/hhvm上。

于 2016-05-28T04:01:16.857 回答