1. 程式人生 > >雲風的 BLOG: sproto 的預設值處理

雲風的 BLOG: sproto 的預設值處理

sproto 由於主要供 lua 使用,是不能在協議定義中描述預設值的。所有不編碼的欄位都呈現為 lua 中的 nil 。

注:這裡還有個實現上的小問題。如果一個數組為空,也會呈現為 nil 而不是空表,所以應當注意處理。

我最近給 sproto 增加了一個新的 api ,可以為一類訊息生成一個全部為預設值的 table 。這樣,使用者就可以方便把這個 table 作為別的 table 的 metatable 中的 index 方法了。相當於實現了原來在 protobuf 中的預設值的特性。

只不過,預設值不能主動定義。所有的 integer 預設為 0 、boolean 預設為 false 、string 預設為空串、子型別為空表,並附加有一項 __type

為子型別的名字。無資料的陣列也預設為一個空表。