我們有這樣的代碼:反應式香蕉能否在網絡中處理週期?
guiState :: Discrete GuiState
guiState = stepperD (GuiState []) $
union (mkGuiState <$> changes model) evtAutoLayout
evtAutoLayout :: Event GuiState
evtAutoLayout = fmap fromJust . filterE isJust . fmap autoLayout $ changes guiState
你可以看到,evtAutoLayout送入guiState其送入 evtAutoLayout - 所以是一個週期的存在。這是故意的。自動 佈局調整gui狀態,直到它達到平衡,然後 它返回無,因此它應該停止循環。當然,新型號 可以再次啓動。
當我們把它放在一起時,我們遇到了編譯函數調用的無限循環。即使autoLayout = Nothing,在編譯期間它仍然會導致堆棧溢出。
如果我刪除guiState工會呼籲並刪除evtAutoLayout出 圖片...
guiState :: Discrete GuiState
guiState = stepperD (GuiState []) $ mkGuiState <$> changes model
它工作正常。
有什麼建議嗎?
既然你說我可以要求澄清/例子......在你的filterRising中,第一個參數是什麼?如果只是將事件轉換爲事件,爲什麼它有2個參數? 你將如何使用filterRising?謝謝! – mentics
@taotree:啊,第一個參數只是某種初始值。我現在已經改變了示例以匹配描述。使用'filterRising'函數很簡單:它將一個事件流作爲參數,並返回一個新的事件流,所以你可以將它應用到你選擇的事件流並獲得一個新的事件流。 –