8

假设我在包含两个字段的 Apache Thrift IDL 文件中定义了一个结构。例如:

struct Thing {
  1: optional string name,
  2: optional i32 size
}

这意味着客户端可以提供没有字段、名称、大小或名称和大小的事物对象。但是,如果我想要一个 Thing 对象有一个名称一个大小(独占或)怎么办目前,我必须使用我的实现代码来防止客户端提供没有字段或两个字段的事物;并记录/评论客户应如何指定事物对象。

简而言之,如果有人定义了一个包含各种字段的结构,是否可以在 IDL 本身中表达您只希望在客户中提供这些字段中的一个?(我使用的是 Apache Thrift 0.9.0。)如果您能说出类似以下的话(| = 或),那就太好了:

struct Thing {
  1: required (string name | i32 size)
}
4

1 回答 1

13

使用工会:

union Thing {
  1: string name,
  2: i32 size
}

Optional 可以省略,required 不允许/对联合有用。

联合已在 0.9.0 (IIRC) 中引入,但 0.9.1 改进了对它们的支持。

于 2013-09-20T18:13:13.487 回答