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 回答