如何将 NetMQ 中的 ReceiveReady 方法从 C# 转换为 F#

How to translate ReceiveReady method in NetMQ from C# to F#

我使用的库没有 F# 文档,只有 C#。由于不熟悉 C#,我遇到了一些麻烦。通读 NetMQ 的 documentation,有一行我在翻译时遇到了问题:

对于上下文,这里是完整的例子:

using (var rep1 = new ResponseSocket("@tcp://*:5001"))
using (var rep2 = new ResponseSocket("@tcp://*:5002"))
using (var poller = new NetMQPoller { rep1, rep2 })
{
    rep1.ReceiveReady += (s, a) =>    // ??????
    {
        string msg = a.Socket.ReceiveString();
        a.Socket.Send("Response");
    };
    rep2.ReceiveReady += (s, a) =>    // ??????
    {
        string msg = a.Socket.ReceiveString();
        a.Socket.Send("Response");
    };

    poller.Run();
}

具体来说,我不知道 rep1.ReceiveReady += (s, a) => 在 C# 上下文中的含义以及如何将其转换为 F#。有任何想法吗? 谢谢

rep.ReceiveReady += (s, a) => { /*...*/ }; 正在使用 lambda 函数订阅 ReceiveReady 事件。这是直接的 F# 翻译:

use rep1 = new ResponseSocket("@tcp://*:5001")
use rep2 = new ResponseSocket("@tcp://*:5002")

use poller = new NetMQPoller()
poller.Add rep1
poller.Add rep2

rep1.ReceiveReady.Add (fun a -> let msg = a.Socket.ReceiveString ()
                                a.Socket.Send "Response")
rep2.ReceiveReady.Add (fun a -> let msg = a.Socket.ReceiveString ()
                                a.Socket.Send "Response")

poller.Run ()

可以在 the documentation 中找到有关 F# 中事件处理的进一步阅读。但请注意,F# 也可以将事件视为可观察对象,这可能被认为更符合惯用语。