duc*_*cin 6 tree struct thrift
我想在apache thrift中表示一个标准的树结构,但是我遇到了以下问题:
[ERROR:/path_to_project/thrift/service.thrift:31] (last token was 'TCategoryTree')
Type "TCategoryTree" has not been defined.
Run Code Online (Sandbox Code Playgroud)
这些是我的节俭结构:
struct TCategory {
1: required string name
}
struct TCategoryTree {
1: required TCategory element,
2: optional list<TCategoryTree> children
}
Run Code Online (Sandbox Code Playgroud)
第31行是2: optional list<TCategoryTree> children
,我定义了一个与我现在定义的类型相同的字段.
可能是apache thrift不支持递归结构还是我在这里犯了某种错误?
编辑:我使用的是0.9.0版
是的,不幸的是,Thrift还不允许递归结构.有这种限制的解决方法,例如在传输数据结构时将其展平.在大多数情况下,这是可行的,尽管双方都需要一些额外的代码.
以下是一个很好的示例:http: //grokbase.com/t/thrift/user/0984cqwxen/recursive-datatypes
更新
目前的Thrift开发中继支持这一段时间了.要小心,因为它允许无限的引用循环(A引用B引用A ...),导致在尝试序列化时堆栈溢出.