2017-03-02 1 views
0

Google protobuf me permet d'écrire du code proto comme ceci:Pourquoi protobuf les deux champs requis/option accepte la valeur « par défaut », je pense que « facultatif » devrait

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

Il compile, pas de problème. Je ne comprends pas tout à fait que, pour le champ "optionnel", quand il n'y a pas de valeur spécifiée, le flux de décodage me renvoie la valeur par défaut, c'est OK. Mais qu'en est-il du champ "required", il ne peut pas être vide, alors comment son "default" est-il aussi valide? Dans quel scénario?

Répondre

1

La valeur "default" est la valeur renvoyée par le getter du champ lorsque le champ n'a pas encore été défini. Lorsque vous créez un objet de message, aucun de ces champs n'est initialement défini, même les champs obligatoires. Donc, la valeur par défaut est ce que le getter va retourner si vous l'appelez immédiatement. D'accord, ce n'est pas particulièrement utile pour les champs obligatoires, mais il n'y avait aucune raison de l'interdire.