64

次のElm Form Exampleの 122 行目のコードでは、<<演算子の意味は何ですか?

Field.field Field.defaultStyle (Signal.send updateChan << toUpdate) "" content

Elm syntax referenceで見つかりませんでした。

フィールドが変更されたときに、そのフィールドを to に送信する代わりに、contenttoupdateChanに送信toUpdateするということupdateChanですか?

4

6 に答える 6

25

<<関数合成です - 関数を返します。

コンポジションは、計算のパイプ、関数のチェーンを作成します。このパイプは入力を待ち、提供されると、最初の関数が計算を開始し、出力を次の関数に送信します。

import Html

add x y =
    Debug.log "x" x + Debug.log "y" y

add9 =
    add 4 << add 5

main =
    Html.text <| toString <| add9 2

:上記の例では、部分適用を使用しています。これは、関数にすべてのパラメーターを提供していないことを意味し、その結果、関数が得られます。

上記の例を Web ブラウザーで実行し、コンソール出力を見ると、次のように表示されます。

x: 5
y: 2
x: 4
y: 7

これを数学演算として書くと、次のようになります。

4 + (5 + 2)
4 + 7

:フォワード バージョンも使用できます>>

署名の読み取り

この演算子の署名を見る:

(<<) : (b -> c) -> (a -> b) -> a -> c

<<operator には、b -> c最初のパラメーターとして関数a -> bがあり、2 番目のパラメーターとして関数があります。

(b -> c) << (a -> b)

しかし、3 番目のパラメーターもありますa->は右結合なので、

(<<) : (b -> c) -> (a -> b) -> a -> c

次と同等です。

(<<) : (b -> c) -> (a -> b) -> (a -> c).

そのため、 functionが<<返されますa -> c

結合性

プログラミング言語では、演算子の結合性 (または固定性) は、括弧がない場合に同じ優先順位の演算子をグループ化する方法を決定するプロパティです。つまり、各演算子が評価される順序は次のとおりです。

a = b = cとして解析されますa = (b = c)

中置演算子

ここでは中置演算子<<として使用していますが、括弧で囲む前置演算子として使用することもできます: or .(<<) (b -> c) (a -> b)(<|) (add 4) (add 5)

elm < 0.18は、通常の関数を中置演算子として使用できるようにするために使用されます

<|オペレーターについて一言

<|関数アプリケーションです - 値を返します

基本的に括弧の代わりに使用します。

text (something ++ something)

次のように書くことができます

text <| something ++ something

したがって、この演算子の署名を見ると:

(<|) : (a -> b) -> a -> b

<|演算子の場合a -> b 、最初のパラメーターとして関数がありa、2 番目のパラメーターとして値があることがわかります。

(a -> b) <| a

を返しますb

function application で同じ値を取得できます<|

v1 = add 4 <| add 5 <| 4
v2 = (add 4 << add 5) 4
于 2016-05-29T12:41:39.337 に答える