2016-09-10 58 views
3

我正在閱讀WebSharper的文檔。在the section about FRP,它指出:玻璃鋼行爲與事件有什麼區別?

官能的反應性編程(FRP)典型地提供爲事件流和隨時間變化的值的行爲類型一個事件類型,對有用的那些組合子在一起。

...

但是,現在我們決定避免實施FRP。相反,我們專注於功能子集,定義類似於行爲的時變視圖值,但不支持實時採樣。事件流留給用戶使用回調或第三方庫來解決。這是對FRP的極大簡化,並且更容易高效實施。由於弱指針在JavaScirpt中變得可用,所以這個決定可能會被修改,尤其是考慮到OCaml React的成功。

在更近期的未來,我們打算提供Concurrent ML組合器,以更好地支持事件流的處理並改進組件的組合。

但是,我不確定這裏描述的「事件類型」和「行爲類型」之間究竟有什麼區別。我搜索了一些文章/教程,但他們似乎也沒有很明確這一點。

我不確定我在WebSharper的實現中沒有「事件」而錯過了什麼。

對不起,如果這個問題聽起來很基本。我不熟悉與玻璃鋼相關的概念。

-

編輯:我想我發現了什麼不對勁沒有事件流,在FRP - Event streams and Signals - what is lost in using just signals?回答我的疑問。要點如下:

  1. 事件流允許累積更新,而行爲只能依賴於觀察到的元素的當前值。

  2. 如果事件和行爲都實現了,它們允許在系統內遞歸。

回答

3

的區別和行爲之間事件的東西,可以追溯到第一篇關於Functional Reactive Animations(PDF),這也解釋了區別相當不錯。這個想法是:

  • 行爲代表隨時間變化的值 - 例如,鼠標X座標是隨時間而變化,但它總有一定的價值。

  • 事件代表系統中的離散事件 - 它們偶爾會發生,並且可能會觸發某些更改,但並不總是有值。例如,鼠標點擊可能會發生,但不能問「點擊的當前值是多少」。

這些都是非常不錯的理論觀點,因爲你可以做不同的事情與行爲和事件,他們很好地捕捉反應系統不同性質的東西背後的一些直覺。在實踐中,實現起來相當棘手 - 「行爲」的大多數表示最終使用了抽樣,所以它們的表現很像離散事件(也許是因爲這就是計算機的工作原理?),所以一些系統實際上遵循原來的嚴格區分。

+0

感謝您的回答。儘管在這種特殊情況下,我仍然想更詳細地瞭解一下,WebSharper團隊在這裏試圖說些什麼?如果事件是離散的,那麼實時採樣無法阻止這種情況? 「事件流」是指什麼?如果我使用他們的實施與其他人相比,我會錯過什麼?知道了理論上的差異,我仍然無法破譯他們的帖子,不幸的是... –

+0

我認爲他們所說的是他們沒有明確區分這兩種。但我對WebSharper不熟悉,所以我不確定。抱歉! –

+0

其實我想我在這裏找到解釋:http://stackoverflow.com/questions/22989253/frp-event-streams-and-signals-what-is-lost-in-using-just-signals似乎有兩個的東西。 1.事件流允許累積更新,而行爲只能依賴於觀察到的元素的當前值。 2.如果事件和行爲都實現了,它們允許在系統內遞歸。 –