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