6

Apache Thriftで標準のツリー構造を表現したかったのですが、次の問題が発生しました。

[ERROR:/path_to_project/thrift/service.thrift:31] (last token was 'TCategoryTree')
Type "TCategoryTree" has not been defined.

これらは私の倹約構造です:

struct TCategory {
    1: required string name
}

struct TCategoryTree {
    1: required TCategory element,
    2: optional list<TCategoryTree> children
}

31行目はです2: optional list<TCategoryTree> children。ここで、現在定義しているのと同じタイプのフィールドを定義します。

Apache Thriftが再帰構造をサポートしていないのでしょうか、それともここで何らかの間違いを犯しているのでしょうか?

編集:私はバージョン0.9.0を使用しています

4

1 に答える 1

7

はい、残念ながら、Thriftはまだ再帰的な構造を許可していません。この制限には回避策があります。たとえば、送信中にデータ構造をフラット化します。ほとんどの場合、これは実行可能ですが、両側に追加のコードが必要です。

これを行う方法の良い例は次のとおりです:http: //grokbase.com/t/thrift/user/0984cqwxen/recursive-datatypes


アップデート

現在のThrift開発トランクは、しばらくの間これをサポートしています。無限の参照ループ(A参照B参照A ...)が可能になるため、シリアル化しようとするとスタックオーバーフローが発生するので注意してください。

于 2013-04-13T22:15:05.910 に答える