0

昨日からこのコードを読んでいて、合理的な説明を考え出そうとしています。私の仮定が正しいことを確認してください。

このコードはhereから来ています。

port requests : Signal (Task x ())
port requests =
  Signal.map lookupZipCode query.signal
    |> Signal.map (\task -> Task.toResult task `andThen` Signal.send results.address)

行 1 はポートを定義し、 aSignalによって構成される a を返します。これはTask、によって識別される型xと空の値です (これは私には意味がありません。明らかに間違っていると思います)。

4 行目と 5 行目は forward 関数の適用構文を使用しているため、4 行目の結果が 5 行目に引数として渡されますが、これらの行で詳細に何が行われているのでしょうか。

関数型リアクティブ プログラミングについて学ぶために、この記事を読んでいますが、これは良いリソースですか?

シグナルに関するドキュメントを読みましたが、ここでポイントを得ることができません。例を使った平易な英語での説明は大歓迎です。私を助けてくれる人に感謝します!

4

1 に答える 1

2

Aportは、Elm が JS ワールドと通信する方法です。

Signal (Task x ())エラータイプを持ち、 Unitxを返すTask のシグナルであることを意味します

2 行目はポートを定義します。これは基本的に、このポートが JS からではなく JS への通信に使用されることを意味します。

の定義をlookupZipCode見ると、 を取り、Stringを返すことがわかりますTask String (List String)。そのコードを見ると、クエリ文字列に対して Http リクエストを実行し、文字列型のエラーまたは文字列のリスト (町の名前のリスト) を返すことがわかります。

したがってSignal.map lookupZipCode query.signal、郵便番号サーバーに問い合わせるこれらのタスクのシグナルを生成します。

次の Signal.map では、上記のタスクを次のように変換します。

  1. エラーと http クエリの結果は Result 型に結合されます。(これは、新しいタスクが決して失敗しないことを意味します)。
  2. andThenこの Result タイプは に送信されますresults.address

JS ランドで実行するために実際に送信される結果の Task にはエラーがなく (これが x が表示される理由です)、Unit タイプになります (これは Signal.send の署名です)。

Task が実際に JS で実行されると、実行の結果は Result 型として results.address になります。

于 2016-02-20T08:49:32.923 に答える