Argo - 解码方法中的箭头括号是什么意思?
Argo - what does mean arrow brackets in decode method?
我试图掌握 Argo 以进行 json 解码。在文档中有解码函数的例子
extension User: Decodable {
static func decode(j: JSON) -> Decoded<User> {
return curry(User.init)
<^> j <| "id"
<*> j <| "name"
}
}
<^>
和 <*>
是什么意思?它们有什么区别?
根据 Github documentation...
<^>
是 map
函数
和
<*>
是 apply
函数
这里描述了这两个...https://robots.thoughtbot.com/functional-swift-for-dealing-with-optional-values
链接自 Github 页面。
N.B。阅读文档:)
tldr,第一个参数使用 <^>
,之后的每个参数使用 <*>
。
长答案:
<^>
与 Swift 的 map
功能相同。它是从 Haskell(一种纯函数式编程语言)借来的运算符。尽管在 Haskell 中它实际上是 <$>
但 Swift 不能在其运算符中使用 $
所以我们(和社区中的其他人)选择了 <^>
。
<^>
,又名 map
,将函数应用于上下文中的值。该上下文可以是 Optional
、Array
、Dictionary
或许多其他内容。在 Optional
的上下文中,<^>
会将第一个参数(运算符左侧)中的函数应用于第二个参数(运算符右侧)中的可选值。如果可选值为 .none
或 .some(x)
,则结果将为 .none
,其中 x
是将可选值传递给函数后展开的结果。
我希望这是有道理的。如果是这样,<*>
除了第一个参数中的函数也包含在像 Optional
这样的上下文中之外,没有太大的不同。所以你有一个 Optional
函数和一个 Optional
值,那么你将使用 <*>
。这就是为什么我们在第一次使用 <^>
之后使用 <*>
的原因,因为在第一次 <^>
、map
之后,我们剩下一个部分应用的构造函数(a函数),已被 <^>
.
包装在上下文中
<*>
也取自 Haskell。在 Haskell 中,它被称为 Applicative
并使用完全相同的运算符。
我试图掌握 Argo 以进行 json 解码。在文档中有解码函数的例子
extension User: Decodable {
static func decode(j: JSON) -> Decoded<User> {
return curry(User.init)
<^> j <| "id"
<*> j <| "name"
}
}
<^>
和 <*>
是什么意思?它们有什么区别?
根据 Github documentation...
<^>
是 map
函数
和
<*>
是 apply
函数
这里描述了这两个...https://robots.thoughtbot.com/functional-swift-for-dealing-with-optional-values
链接自 Github 页面。
N.B。阅读文档:)
tldr,第一个参数使用 <^>
,之后的每个参数使用 <*>
。
长答案:
<^>
与 Swift 的 map
功能相同。它是从 Haskell(一种纯函数式编程语言)借来的运算符。尽管在 Haskell 中它实际上是 <$>
但 Swift 不能在其运算符中使用 $
所以我们(和社区中的其他人)选择了 <^>
。
<^>
,又名 map
,将函数应用于上下文中的值。该上下文可以是 Optional
、Array
、Dictionary
或许多其他内容。在 Optional
的上下文中,<^>
会将第一个参数(运算符左侧)中的函数应用于第二个参数(运算符右侧)中的可选值。如果可选值为 .none
或 .some(x)
,则结果将为 .none
,其中 x
是将可选值传递给函数后展开的结果。
我希望这是有道理的。如果是这样,<*>
除了第一个参数中的函数也包含在像 Optional
这样的上下文中之外,没有太大的不同。所以你有一个 Optional
函数和一个 Optional
值,那么你将使用 <*>
。这就是为什么我们在第一次使用 <^>
之后使用 <*>
的原因,因为在第一次 <^>
、map
之后,我们剩下一个部分应用的构造函数(a函数),已被 <^>
.
<*>
也取自 Haskell。在 Haskell 中,它被称为 Applicative
并使用完全相同的运算符。