【问题标题】:Hacklang — Why can't I make a nullable cyclic typedef?Hacklang — 为什么我不能创建一个可以为空的循环 typedef?
【发布时间】:2016-09-26 11:03:11
【问题描述】:

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

【问题讨论】:

    标签: typedef hhvm hacklang cyclic-dependency


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      从去年开始,现在是a feature-request on facebook/hhvm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多