6
A
回答
10
请不是(:=)从Json.Decode从0.18.0
缀运算符
在榆树开始删除,你可以自定义infix operators,他们存在的目的是为了提供代码的可读性更强的版本。具有讽刺意味的是,当你对这个概念不熟悉时,情况恰恰相反。
(:=)是一个自定义中缀运算符,由Json.Decode包提供。
请考虑自定义管道符的下面的例子:
import Html exposing (text)
(<|>) : String -> String -> String
(<|>) beginning end =
beginning ++ "Bar" ++ end
main =
text ("Foo" <|> "Buz") -- "FooBarBuz"
强烈建议,以避免定制中缀运算符的使用。
让我们回到(:=)运营商。
类型定义为它看起来像(:=) : String -> Decoder a -> Decoder a
,这意味着,我们必须通过一个String和解码器,从可用Decoder Primitives列表并重新运行新的解码器,映射到一个字符串键。
本机代码
在JavaScript的世界里,解码器是做类型检查的回调函数。
例如,这里是一个解码器字符串基元:
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
(:=)映射的字符串键一个回调(它不完全是一个回调,但这是你能想到的最接近的),它将检查JavaScript对象中值的类型,将其转换为Elm值。
3
它需要一个密钥你在操作字典和尝试解码什么在那里发现了解码器,如任何内置的那些的甚至你自己定制的。
它本质上是一个访问at
。
at ["name"] string
等于:
"name" := string
5
它创建了一个JSON字符串给定键的解码器。
"name" := string
创建一个在“名称”中提取的值,并把它传递给解码器string
一个解码器。
相关问题
- 1. 是什么逻辑运算符“不是” EL
- 2. 什么是Java“= +”运算符?
- 3. 什么是 - >运算符?
- 4. 什么是“===”运算符?
- 5. 什么是()=>运算符?
- 6. C++ - 什么是运算符。*?
- 7. 什么是##运算符?
- 8. 是什么?:运算符
- 9. 运算符&&是什么?
- 10. 运算符模块中`in`的等效运算符是什么?
- 11. python中的%运算符是什么?
- 12. 什么是scala Stream中的#::运算符?
- 13. 什么是JPQL中的BINARY运算符?
- 14. C中的'#'运算符是什么?
- 15. 什么是Java中的&=运算符
- 16. 什么是??! Javascript中的运算符?
- 17. 什么是C++中的static_case运算符?
- 18. 什么是HTML中的“:”运算符?
- 19. Ruby中的“=〜”运算符是什么?
- 20. 'string%variables`中的%运算符是什么?
- 21. 什么是C#中的“??”运算符?
- 22. JSTL/EL中的三元运算符
- 23. 在elixir中什么是=〜运算符
- 24. 什么是|运算符在JavaScript中?
- 25. 在Python中,“〜〜”运算符是什么?
- 26. “+ =”运算符是做什么的?
- 27. @运算符的意义是什么?
- 28. HAML - “!=”运算符是做什么的?
- 29. 模运算符的语义是什么?
- 30. “[]”运算符的名称是什么?
请解释一下你不理解或不能工作。我投票结束这个问题*不清楚你要问什么* – Druzion
哇,所有的答复都清楚。非常感谢大家。我不明白,这个运算符是特定于Json.Decode包,我认为它源自核心。 –