Как перевести метод ReceiveReady в NetMQ из C# в F#

Я работаю с библиотекой, которая не имеет документации F#, только C#. Не имея знакомства с C#, у меня возникли небольшие проблемы. Читая документацию по NetMQ, у меня есть проблема с переводом:

Для контекста, вот полный пример:

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#. Есть идеи? Благодарю.

1 ответ

Решение

rep.ReceiveReady += (s, a) => { /*...*/ }; подписывается на 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 ()

Дальнейшее чтение по обработке событий в F# можно найти в документации. Обратите внимание, однако, что F# может также рассматривать события как наблюдаемые, что, вероятно, будет считаться более идиоматическим.

Другие вопросы по тегам