1

F# のドキュメントがなく、C# のみのライブラリを使用しています。C# に慣れていないので、少し問題があります。NetMQのドキュメントを読んでいると、翻訳に問題がある行が 1 つあります。

コンテキストについては、完全な例を次に示します。

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# に翻訳する方法がわかりません。何か案は?ありがとう。

4

1 に答える 1

4

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# はイベントをオブザーバブルとして扱うこともできることに注意してください。

于 2016-07-31T00:47:20.173 に答える