繁体   English   中英

Protocol Buffers 3:枚举作为映射中的键

[英]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 biomsnumber 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM