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包,我認爲它源自核心。 –