2017-03-02 6 views
0

グーグルいるProtobufは、私はこのような原始コードを記述できるようにする必要があり期待:いるProtobuf両方必要/オプションフィールドは、「デフォルト」値を受け入れなぜ、私が唯一の「オプション」は

syntax="proto2"; 
message hello 
{ 
    optional int32 id=1; 
    required string str=2[default="abc"]; 
    optional int32 op=3 [default=15]; 
} 

それは、何の問題をコンパイルしません。私はちょうどそれを理解していない、 "オプション"フィールド、値が指定されていないとき、デコードストリームは私にデフォルト値を返します、それはOKです。しかし、 "必須"フィールドはどうでしょうか、それは空ではないので、その "デフォルト"も有効です。どのようなシナリオで?

答えて

1

"default"値は、フィールドがまだ設定されていないときにフィールドのゲッターが返す値です。新しいメッセージオブジェクトを作成すると、当初はフィールドは設定されていません - 必須フィールドでもあります。したがって、デフォルト値は、即座に呼び出すとゲッターが返す値です。

これは必須フィールドにはあまり役に立ちませんが、これを禁止する理由はないようです。

関連する問題