1

私は再帰的なコンテナのような構造を実装しようとしています。バニラの巡回型定義が実現できない理由は理解できますが、次のことも許可されないのはなぜですか?

typedef cycle = shape('cycle' => ?cycle); // Cyclic typedef (Typing[4014])

作成は簡単に思えます:

$cycle = shape('cycle'=>shape('cycle'=> /* shape(... =>*/ null /* ...) */));

そして、1つを繰り返しても問題はありませんよね?

function recurse(cycle $cycle) {
    if(!is_null($cycle['cycle'])) recurse($cycle['cycle']));
}
4

2 に答える 2

2

あなたが言及した機能要求にもう少し色を付けるには. 私の知る限り、あなたが示唆するように形状が機能しない根本的な理由はありません。場合によっては役立つことさえあります。これは完全に実装上の問題です。少なくとも、私が最後にタイプチェッカーのコードに精通していたときは、実装するのはかなり困難でした。(繰り返しますが、興味深い理由ではなく、形状を拡張する方法について深い仮定を置いてコードが書かれているというだけです。) とはいえ、私が最後にこれを見たときから約 1 年の間に形状が多少変化しました。今はもっと簡単です、わかりません。しかし、この機能は、構築する努力に値するほど重要ではありませんでした.おそらく、前述の形状の更新により、それらがやや広く使用されているため(特にFBで)、現在または間もなく更新される可能性があります.

于 2016-05-28T22:34:17.277 に答える
0

現在、昨年からfeature-requestfacebook/hhvmにあります。

于 2016-05-28T04:01:16.857 に答える