3

我试图阻止一个事件两次订阅一个事件:

let ex = new Event<int>()
let lst = new ResizeArray<obj>()

let subscribe f = 
    if (lst.Contains f) then // <- doesn't work, can't compare functions
        failwith ("subscribed twice!!")
    else
        lst.Add(f)
        let obs = ex.Publish :> System.IObservable<_> 
        obs |> Observable.subscribe f 

不幸的是,它不起作用。例如

let foo x = printfn "%d" x
subscribe foo
subscribe foo
ex.Trigger 42    // Produces 42 42

看起来我们无法比较 F# 中的函数。

if (foo = foo) then () // won't compile
(foo :>obj) = (foo :> obj) // = false

有没有办法比较函数,或者是否有另一种方法可以停止对事件/IObservables 的多个订阅?

4

0 回答 0