我可以看到,在Google Chrome(Chromium)中,第一个枚举值(默认值)被声明为"未指定":
optional
https://cs.chromium.org/chromium/src/components/url_pattern_index/proto/rules.proto
这样做的目的是什么?
考虑到它protobuf
2,因此可以使用required
和unspecified
标记字段,只需填写字段即可删除// The format of a URL pattern.
enum UrlPatternType {
URL_PATTERN_TYPE_UNSPECIFIED = 0;
// A pattern without special characters, e.g. "example.com".
URL_PATTERN_TYPE_SUBSTRING = 1;
// The pattern contains one or more wildcards, namely '*' and/or '^'
// characters. The '*' matches any sequence of characters, while the '^'
// matches a separator, i.e. anything but a letter, a digit, or one of [-._%].
URL_PATTERN_TYPE_WILDCARDED = 2;
// The pattern is a regular expression.
URL_PATTERN_TYPE_REGEXP = 3;
};
枚举值可选的。
让我们说: https://cs.chromium.org/chromium/src/components/url_pattern_index/proto/rules.proto?l=22:
optional
但该字段为 optional UrlPatternType url_pattern_type = 6;
:https://cs.chromium.org/chromium/src/components/url_pattern_index/proto/rules.proto?l=150:
unspecified
为什么不传递它而不是传递 <h2 class="title1"></h2><br>
<div class="author1"></div><br>
<div class="publishedAt1"></div><br>
<p class="description1"></p><br>
<div class="url1"></div><br>
<h2 class="title2"></h2><br>
<div class="author2"></div><br>
<div class="publishedAt2"></div><br>
<p class="description2"></p><br>
<div class="url2"></div><br>
```
值?
答案 0 :(得分:4)
如果您希望将来转移到proto3,也许最重要的原因是提供一条干净的路径,因为这是唯一可以直接兼容的选项。
然而,它还简化了许多平台的使用,因为不同语言之间的枚举差别很大。它还使默认值非常明显地显示为“可能是错误的” - 再次:默认的新实例如何初始化可能在平台/语言之间变化很大,并且您希望的控制级别在某些平台上可能不可用。