operators - := operator do in Elm? 到底是做什么的

标签 operators elm colon-equals

这是文档中一个不清楚的示例,使用此运算符:http://package.elm-lang.org/packages/elm-lang/core/3.0.0/Json-Decode#at

最佳答案

请注意 (:=)已从 Json.Decode 中删除从 0.18.0 开始

中缀运算符

在 Elm 中,您可以定义自定义 infix operators ,它们存在的目的是为了提供更具可读性的代码版本。具有讽刺意味的是,当你不熟悉这个概念时,它会做相反的事情。

(:=)是一个自定义中缀运算符,由 Json.Decode 提供包裹。

请考虑以下自定义中缀运算符的示例:

import Html exposing (text)

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

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

强烈建议避免使用自定义中缀运算符。

让我们回到 (:=)运算符(operator)。

它的类型定义看起来像 (:=) : String -> Decoder a -> Decoder a ,这意味着,我们必须从可用列表中传递一个字符串和一个解码器 Decoder Primitives并重新运行一个新的解码器,并将字符串键映射到它。

native 代码

在 JavaScript 世界中,解码器是进行类型检查的回调函数。

例如,这是一个解码器字符串原语:

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

这是一个等效于 (:=) 的 JavaScript运算符(operator):

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; 博士

(:=)将字符串键映射到回调(它不完全是回调,但这是您能想到的最接近的),当您将其转换为 Elm 值时,它将检查 JavaScript 对象中值的类型。

关于operators - := operator do in Elm? 到底是做什么的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382675/

相关文章:

http - Elm http 2.0.0 函数需要构造函数

makefile - := vs = in make macros

python - 为什么表达式 (0==0 & 1==1) 的计算结果为 False?

c - 为什么以下 C 代码中的后递减运算符没有按预期工作? (具有 7 的值)

c++ - C++中的运算符重载(小错误)

arrays - linspace 相对于冒号 ":"运算符的优势是什么?

compiler-errors - 可扩展记录和高阶函数

elm - 如何在 Elm 中获取查询参数?

postgresql - 被遗忘的赋值运算符 "="和常见的 ":="

mysql - := operator mean in mysql? 是什么