Tuesday, May 18, 2021

postwalk

如果說, sequence 是 Clojure 世界裡最常用的「走訪抽象」、而 map 是對於這種抽象最佳的「轉換函數」的話,那如果把 sequence 換成 tree 的時候,那 map 應該要換成什麼呢?應該是 postwalk 。從這個上述的角度來看的話, postwalk 可以視為是一種 map 的 generalized form 。


我最近有遇到一種情況,我需要在 backend side 生成 hiccup form,然後,將這個 hiccup form 送到 frontend side 。然而,我卻又需要在 hiccup form 裡去呼叫 reagent form 1 的函數。所以我的作法就是:在 backend 生成 hiccup form 時,對需要呼叫 reagent form 1 函數的地方,先塞一個「佔位」的 keyword 。等到 hiccup form 被送到 frontend 時,再將該 keyword 轉換成 reagent form 1 。


上述的那個轉換操作,我就是用 postwalk 來做,非常的直覺與容易。