gpt4 book ai didi

protocol-buffers - 在 protobuf 2 中编码 "nullable"字段的首选方法是什么?

转载 作者:行者123 更新时间:2023-12-03 23:38:26 28 4
gpt4 key购买 nike

我正在定义一个 ProtoBuf 消息,其中我想要一个“可为空”字段 - 即,我想区分具有值和不具有值的字段。作为一个具体的例子,假设我有“x”和“y”字段来记录某个对象的坐标。但在某些情况下,坐标是未知的。以下定义将 不是 工作,因为如果 x 或 y 未指定,那么它们默认为零(这是一个有效值):

message MyObject {
optional float x = 1;
optional float y = 2;
}

一种选择是添加一个 bool 字段,记录相应字段的值是否已知。 IE。:
message MyObject {
optional bool has_x = 1; // if false, then x is unknown.
optional bool has_y = 2; // if false, then y is unknown.
optional float x = 3; // should only be set if has_x==true.
optional float y = 4; // should only be set if has_y==true.
}

但这强加了一些额外的簿记——例如,当我设置 x 字段的值时,我必须始终记住还要设置 has_x。另一种选择是使用列表值,约定列表总是长度为 0 或长度为 1:
message MyObject {
repeated float x = 1; // should be empty or have exactly 1 element.
repeated float y = 2; // should be empty or have exactly 1 element.
}

但在这种情况下,定义似乎有点误导,界面也好不了多少。

有没有比这两个更好的我没有想到的第三种选择?你是如何处理在 protobuf 中存储可为空的字段的?

最佳答案

NaN 的概念对于每种类型,然后使用 default (如下所示)将其设置为值。如果没有为该特定字段指定任何内容,则将使用此选项。

optional float x = 1 [default = -1];

关于protocol-buffers - 在 protobuf 2 中编码 "nullable"字段的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184215/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com