gpt4 book ai didi

events - F# 中的 Control.Observable 和 Control.Event 模块之间有什么相似之处/不同之处?

转载 作者:行者123 更新时间:2023-12-04 02:15:37 24 4
gpt4 key购买 nike

F#(至少在 Visual Studio 2012 中)同时具有 Control.Observable Control.Event .

  • 它们有什么关系?
  • 什么时候应该用哪一个?
  • 两者之间有性能差异吗?


  • 我也很想知道 .NET IEnumerable 有哪些 Haskell 模块/包/功能/ IObservable通过对 .NET 的响应式扩展实现的二元性对应。

    最佳答案

    要回答您问题的第一部分,IEvent 之间存在许多差异。和 IObservable .之所以有两种类似的类型是IEvent专为 F#(早期,主要出于兼容性原因而保留)和 IObservable type 后来被添加到 .NET 中(因此 F# 也添加了对它的支持)。以下是一些区别:

  • IEvent不支持删除事件处理程序,因此当您创建处理管道(组合 mapfilter 和其他)然后调用 RemoveHandler在结果事件上,它会附加一些处理程序(是的,这是一个泄漏和 we wrote a more detailed paper about it )
    另一方面IObservable能够删除处理程序。
  • 由于上一点,IObservable关于有状态组合器的行为不同。例如,当您使用 Event.scan ,您可以将多个处理程序附加到结果事件,它们将看到相同的状态。 IObservable为每个附加的处理程序创建一个“新状态”(除非您明确使用主题)。

  • 在实际的 F# 编程中,这意味着:
  • 您通常应该更喜欢 IObservable如果您希望能够删除事件处理程序(使用 RemoveHandler 或在 F# 异步工作流中使用 AwaitObservable 时)。
  • 如果要声明事件(可从 C# 使用),则需要创建类型为 IEvent 的属性。所以你需要使用Event组合器。

  • 正如评论中提到的,F# 模型深受函数响应式编程 (FRP) 的影响,这是一个最初在 Haskell 中开发的想法,因此您应该找到很多类似的库。 F# 版本“不那么纯粹”,以便对 .NET 编程更实用。

    关于events - F# 中的 Control.Observable 和 Control.Event 模块之间有什么相似之处/不同之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11747861/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com