2017-03-02 4 views
0

Die Google protobuf erlauben Sie mir proto Code wie folgt zu schreiben:Warum protobuf beide erforderlich/optional Feld "default" Wert annimmt, erwarte ich, dass nur "optional" sollte

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

Es kompiliert, kein Problem. Ich verstehe das nicht einfach, denn für das "optionale" Feld, wenn kein Wert angegeben ist, gibt der Dekodierstrom den Standardwert zurück, es ist OK. Aber was ist mit dem Feld "erforderlich", es kann nicht leer sein, also wie sein "Standard" auch gültig ist? In welchem ​​Szenario?

Antwort

1

Der "Standardwert" ist der Wert, der vom Getter des Feldes zurückgegeben wird, wenn das Feld noch nicht festgelegt wurde. Wenn Sie ein neues Nachrichtenobjekt erstellen, wird zunächst keines der Felder festgelegt, nicht einmal die erforderlichen Felder. Der Standardwert ist also der Wert, den der Getter zurückgibt, wenn Sie ihn sofort aufrufen.

Zugegeben, dies ist nicht besonders nützlich für Pflichtfelder, aber es schien keinen Grund zu geben, es zu verbieten.

Verwandte Themen