この演算子を使用したドキュメントの不明確な例を次に示します: http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#at
3 に答える
(:=)から始まる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 オブジェクトの値の型をチェックします。