我的Thrift IDL有一个循环引用,但在Java中运行没有问题(作为服务器和客户端)。生成的代码在Ruby中不起作用,尽管我们发现如果每个类被分成一个单独的文件并且它可以工作,它将会起作用。在别人需要。我想在Thrift IDL中模仿这个文件结构但是(除了组织性更差)它失败了,因为Thrift编译器对分辨率本身非常天真(我相信它遵循包括后退和前后,陷入无限循环)在编译时)。
除了手动编辑/后处理生成的Ruby客户端之外,还有办法解决这个问题吗?
我找到了一张Jira机票,要求支持这个,但它已经老了,它一定是被遗忘了。 https://issues.apache.org/jira/browse/THRIFT-476
(我也知道他们最近为命名空间添加了一个编译器选项,但我认为这不会有助于缓解这个问题吗?我不是一个很重要的Ruby-ist ...... https://issues.apache.org/jira/browse/THRIFT-2574)< / p>
IDL与此类似,但我们正在转换为&#34; union&#34;对于容器...如果你有一个更好的多态性解决方案,也会喜欢听到它。 :)
struct Collection {
1: list<CollectionElement> collection_elements;
}
struct CollectionElement {
1: PolymorphContainer x;
2: i32 quantity;
}
struct PolymorphContainer {
1: Type1 x;
2: Type2 y;
3: Collection z;
}