私はF#とSuave
を学び始めました。F#の適用という本を読んでいます。F#Suave Warbler関数
私が苦労していることの1つは、の機能です。執行を延期することとは何かを知っていますが、なぜ、いつ、なぜ必要なのかを理解していません。
明らかにの代わりにrequest
機能を使用することもできます。
これらの機能を使用する理由と時期については、誰でも詳細を提供できますか。
私はF#とSuave
を学び始めました。F#の適用という本を読んでいます。F#Suave Warbler関数
私が苦労していることの1つは、の機能です。執行を延期することとは何かを知っていますが、なぜ、いつ、なぜ必要なのかを理解していません。
明らかにの代わりにrequest
機能を使用することもできます。
これらの機能を使用する理由と時期については、誰でも詳細を提供できますか。
とcontext
は、の特殊なバージョンであるという意味で関連しています。彼らはすべて同じことをする - 彼らは彼らの議論のいくつかの側面を検査し、その議論に適用する関数を返す。
Suaveの基本的なビルディングブロックWebPart
は、具体的なオブジェクトではなく、HttpContext -> Async<HttpContext> option
であることに注意してください。これが効果的に意味するのは、これらの3つの機能がHttpContext
を検査し、その構成に基づいてWebPart
を使用できることです。が何をその中核に
let warbler f a = f a a
// ('t -> 't -> 'u) -> 't -> 'u
あなたはそれを機能f
と引数a
を与えます。関数f
はa
を見て、't -> 'u
という新しい関数を返します。a
に適用されます。
事がおよそそれは完全に汎用的だということです - あなたはどこでもあなたがいる限り種類を揃えるようcontext
またはrequest
を使用したいが、それはサーブが興味を持っているドメインについては何も知らないそれを使用することができ
「ドメインの言語を話す」ということの専門のバージョンが存在する理由です:彼らはウグイスと同じ「形」を持っていることを
let request apply (a : HttpContext) = apply a.request a
// (HttpRequest -> HttpContext -> 'a) -> HttpContext -> 'a
let context apply (a : HttpContext) = apply a a
// (HttpContext -> HttpContext -> 'a) -> HttpContext -> 'a
お知らせ - 唯一の違いはHttpContext
タイプが「ハードコードさ」であるということでは、 - 使いやすくなっています。
もう1つの回答は、の機能とその関係をcontext
とrequest
の機能について既に説明しました。私はいつあなたがこれらを使用したいのかを示したいと思います。
Suaveサーバーを起動するときには、ルーティング、HTTPメソッド、および応答生成機能のWebParts
の要求処理パイプラインを提供する必要があります。これは、Webサーバーを起動する頃には、すべてWebPart
関数がすでに実行されていることを意味します。 、あなたはこのapp
パイプラインを使用してWebサーバを起動した場合app
値を作成したとき、あなたは常に生成された同じタイムスタンプが表示されます
let app = GET >=> path "/" >=> OK (string DateTime.Now)
:
は、現在のサーバー時刻を表示ミニマルなWebアプリケーションを想像してみてあなたがウェブリクエストをいつリクエストするかに関わらず。
関数とその特殊バージョンcontext
とrequest
は、実行を延期するだけでなく、結果が必要になるたびにWebサーバーが提供された関数を呼び出すことも可能にします。
let app = GET >=> path "/" >=> warbler (fun ctx -> OK (string DateTime.Now))
ありがとうございます。あなたとあなたのscrwtpの答えは非常に便利です。再度、感謝します。私はあなたの答えをupvotedしました。 –
おかげscrwtp:例のシナリオでは
この
app
は、予想される結果を提供します。いい答えだ。 –