[026] 看 Code 說故事:Facebook Folly(三)- Optional

[026] 看 Code 說故事:Facebook Folly(三)- Optional

先前Lazy 其中一個特性是:運算式/資源只會被執行/索求一次。實作此特性用到了 Optional,位置:

  • folly/Optional.h

Lazy 實作 operator() 覆載函數如下:

  result_type& operator()() {
    if (!value_) value_ = func_();
    return *value_;
  }

value_ 可被用來「判斷是否已給值(Function func_ evaluated or not)」,也可用來儲值 func_ 的回傳值。

由此來看,Optional 可以讓原本的型別多了一種「供外界查詢是否已被賦值」的能力。先前有過類似的需求,用了「急就章」解法:以 int 代表三種狀態:

  • 為 -1 表示值尚未被設定
  • 為 0 表示 false
  • 為 1 表示 true

一直不滿意這種作法,湊和著用。有機會可以來試試 Optional...