假设我在Apache Thrift IDL文件中定义了一个包含两个字段的结构。例如:
struct Thing {
1: optional string name,
2: optional i32 size
}
这意味着客户端可以提供没有字段,名称,大小或名称和大小的Thing对象。但是,如果我想要一个Thing对象 一个名称或一个大小(独占或)?目前,我必须使用我的实现代码来防止客户端提供没有字段或两个字段的Thing;并记录/评论客户应如何指定Thing对象。
简而言之,如果某人定义了包含各种字段的结构,是否可以在IDL本身中表达,您只需提供这些字段中的一个在客户? (我正在使用Apache Thrift 0.9.0。)如果您能说出以下内容(| =或),那将会很棒:
struct Thing {
1: required (string name | i32 size)
}
答案 0 :(得分:7)
使用工会:
union Thing {
1: string name,
2: i32 size
}
可以省略可选项,对于联合不允许/不需要。
0.9.0(IIRC)已经引入了工会,但0.9.1已经改进了对它们的支持。