Events Can';t比较f#中用于事件订阅保护的函数

Events Can';t比较f#中用于事件订阅保护的函数,events,f#,compare,subscribe,reactive,Events,F#,Compare,Subscribe,Reactive,我正在尝试使用以下命令阻止事件订阅两次事件: 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

我正在尝试使用以下命令阻止事件订阅两次事件:

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 
看起来我们无法比较F#中的函数


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

没有,没有方法可以比较函数,这是一种功能,而不是bug。你为什么要有这样的“保护”?你想解决的更大的问题是什么?也许,如果你想区分你的订户,你需要更好地表达他们,而不仅仅是功能(谷歌“原始困扰”)。@fyodor我想我应该更清楚我的意图。我只是想知道我什么时候做错了什么。当我发现双重订阅时,我将更改“更高级别”代码以避免它。
let foo x = printfn "%d" x
subscribe foo
subscribe foo
ex.Trigger 42    // Produces 42 42
if (foo = foo) then () // won't compile
(foo :>obj) = (foo :> obj) // = false