Как перевести метод 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# может также рассматривать события как наблюдаемые, что, вероятно, будет считаться более идиоматическим.