12 7 給計算增加日誌記錄

2021-06-01 22:47:43 字數 370 閱讀 9763

12.7 給計算增加日誌記錄

日誌通常可以使用全域性可變狀態實現。然而,如果我們想要避免使用全域性可變狀態,並保持程式的純函式性,又會如何呢?我們會有乙個選擇,就是把日誌記錄器的狀態作為額外的引數值,傳遞我們要呼叫的每個函式。實現可能非常困難(想象一下,如果我們決定將另乙個引數新增到這個狀態中!)。

要解決這個問題,我們可以建立乙個自定義計算型別,啟用日誌記錄,隱藏計算型別內的日誌記錄器的狀態。這是類似於 haskell 使用的嵌入技術,在無任何***的純函式式語言中,處理狀態 (比如,檔案系統)。我們要實現的這個示例依賴於這樣的事實,我們可以圍繞有計算表示式塊的、標準 f# 的**任何一段。為此,使用 c# 對此示例是不可行的。我們會首先設計需要的計算型別 (一元型別),允許簡單的日誌記錄。

12 7 給計算增加日誌記錄

12.7 給計算增加日誌記錄 日誌通常可以使用全域性可變狀態實現。然而,如果我們想要避免使用全域性可變狀態,並保持程式的純函式性,那又該如何呢?我們有乙個選擇,就是把日誌記錄器的狀態作為額外的引數值,傳遞我們要呼叫的每個函式。實現可能非常困難 想象一下,如果我們決定將另乙個引數新增到這個狀態中!要解...

linux增加日誌記錄IP操作功能

主要功能 記錄 具體ip在具體某時間登入系統 操作的每一條操作命令記錄。who var log wtmp編輯環境變數檔案 etc profile檔案 vim etc profile 行尾增加如下內容 history export histtimeformat y.m.d h m s user ip ...

12 7 1 建立日誌記錄的計算

12.7.1 建立日誌記錄的計算 這個計算將產生乙個值,並能夠將訊息寫入到本地日誌記錄的緩衝區。這意味著,計算的結果將是乙個值,和包含這些訊息的字串列表。再次,我們還是使用有乙個識別器的差別聯合,表示這個型別 type logging t 這個生成器的實現展示在清單 12.23 中。最有趣的是,bi...