web-dev-qa-db-ja.com

elmでの `<<`演算子の意味は何ですか?

Elm Form Example 、122行目から取得した次のコードでは、<<演算子の意味?

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

Elm構文リファレンス で見つかりませんでした。

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

54
Not an ID

_<<_ は関数構成であり、関数を返します。

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

_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
_

_<<_演算子には、最初のパラメーターとして関数_b -> c_があり、2番目の関数として関数_a -> b_があります。

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

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

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

以下と同等です:

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

したがって、_<<_は関数_a -> c_を返します。

連想性

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

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

中置演算子

ここでは_<<_を 中置演算子 として使用していますが、括弧で囲む接頭辞演算子として使用することもできます:_(<<) (b -> c) (a -> b)_または_(<|) (add 4) (add 5)_。

Elm <0.18 使用 通常の関数を使用して、中置演算子として使用できます。

_<|_演算子についての言葉

_<|_ は関数アプリケーションです-戻り値

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

text (something ++ something)

として書くことができます

_text <| something ++ something_

この演算子の signature を見ると:

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

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

_(a -> b) <| a_

bを返します。

関数アプリケーション_<|_で同じ値を取得できます。

_v1 = add 4 <| add 5 <| 4
v2 = (add 4 << add 5) 4
_
23
rofrol

機能構成です。具体的な例としては、

\x -> (Signal.send updateChan (toUpdate x))

Elmでは、構文の一部ではなく、標準ライブラリの一部です。 Basics。<<

11
CheatEx

javascript開発者向けの説明:

--Elm

(a << b) x

同様になります

//javasript

a(b(x))

<<または>>が呼び出されます 関数構成

0
hien