[英]Protocol Buffers 3: Enums as keys in a map
不允许将枚举用作映射中的键。 这里的 PaxType 是一个枚举,不允许用作键。
enum PaxType {
ADULT = 0 ;
CHILD = 1 ;
INFANT = 2 ;
}
message FlightData {
map<PaxType, FareType> fareType = 1;
}
这是不允许的,因为它不能很好地与 proto3 开放枚举语义配合使用。 例如,在 Java 中,如果您有一个 Map,则键只能是定义的值之一。 如果您碰巧从远程客户端/服务器接收到不在定义值集中的枚举键值,则无法将其放入映射中。 这种限制迫使我们要么删除具有未知枚举键的映射条目(这违反 proto3 开放枚举语义),要么禁止将枚举作为映射键一起使用。
供参考: https : //groups.google.com/forum/#!topic/protobuf/ikeldBe60eI
正如 Vivek Sinha 已经说过的那样,不允许将枚举用作地图中的键。 但是,您可以使用列表并按照定义枚举的相同顺序填充它。 例如,当您编写一个使用生物群落的游戏时,您希望将biom type
映射到世界number of existing bioms
的number of existing bioms
。 这可以按如下方式完成:
enum BiomType {
PLACEHOLDER = 0;
FOREST = 1;
DESERT = 2;
}
message Map {
repeated int32 biom_distribution = 1;
}
当您填充biom_distribution
列表时,您必须保持枚举中元素的顺序(在本例中为BiomType
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.