7

この演算子を使用したドキュメントの不明確な例を次に示します: http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#at

4

3 に答える 3

14

(:=)から始まるJson.Decodeから削除されることに注意してください。0.18.0

中置演算子

Elm では、カスタムの中置演算子を定義できます。これらの存在の目的は、より読みやすいバージョンのコードを提供することです。皮肉なことに、この概念に慣れていない場合は逆になります。

(:=)は、 Json.Decodeパッケージによって提供されるカスタム中置演算子

カスタム中置演算子の次の例を検討してください。

import Html exposing (text)

(<|>) : String -> String -> String
(<|>) beginning end =
  beginning ++ "Bar" ++ end

main =
  text ("Foo" <|> "Buz") -- "FooBarBuz"

カスタム中置演算子の使用を避けることを強くお勧めします。

(:=)演算子に戻りましょう。

その型定義は のよう(:=) : String -> Decoder a -> Decoder aになります。つまり、使用可能なDecoder Primitivesのリストから String と Decoder を渡して、文字列キーがマップされた新しいデコーダを再実行する必要があります。

ネイティブ コード

JavaScript の世界では、デコーダーは型チェックを行うコールバック関数です。

たとえば、Decoder String Primitive は次のとおりです。

function decodeString(value) {
  if (typeof value === 'string' || value instanceof String) {
    return value;
  }
  crash('a String', value);
}

(:=)演算子に相当する JavaScript は次のとおりです。

function decodeField(field, decoder) {
  return function(value) {
    var subValue = value[field];
    if (subValue !== undefined) {
      return decoder(subValue);
    }
    crash("an object with field '" + field + "'", value);
  };
}

TL;DR

(:=)は、文字列キーをコールバック (正確にはコールバックではありませんが、考えられる最も近いものです) にマップします。これは、Elm 値に変換するときに、JavaScript オブジェクトの値の型をチェックします。

于 2016-04-03T18:18:36.780 に答える