gpt4 book ai didi

javascript - 你如何阅读 ramda 文档?

转载 作者:行者123 更新时间:2023-11-29 19:05:15 25 4
gpt4 key购买 nike

我无法理解 Ramda 的签名 docs .例如,如果你查看 map,你会看到这个

仿函数 f => (a → b) → f a → f b

我不明白这个模式如何适合这个例子:

var double = x => x * 2;

R.map(double, [1, 2, 3]); //=> [2, 4, 6]

这个例子中的仿函数是[1,2,3],那么它是如何被放入Functor f => 中的f 的签名中的呢? (a → b) → f a → f b?另外, 是什么意思?

最佳答案

我会在这里给出一个简短的答案,但一个更完整的答案分布在对 a similar question 的两个答案中。 ,又取自 Ramda wiki page . (免责声明:我是该页面的作者,也是 Ramda 本身的负责人之一。)

这分为两部分:

Functor f => (a → b) → f a → f b

在粗箭头 ( => ) 之前,我们对余数有限制。此示例中的单一约束是变量 f必须是 Functor . Functor 是一种类型,其成员具有 map遵循一定规律的方法。声明是通过另一种类型参数化的,所以我们不只写 f但是f String , f Number ,或者更一般地说,f a对于某些未知类型 a .

细箭头 ( -> ) 是函数类型的缩写。所以不要写

Function x y

我们可以这样写

x -> y

或在需要避免歧义时。

(x -> y)

将这些放在一起,我们可以注意到 R.map(double, [1, 2, 3]) , 我们有一个来自 double 的函数 ( Number )至 Number ,这意味着我们的 ab都是Number .我们的仿函数是 Array .所以用这些类型专门定义,我们有 map接受来自 Number 的函数至 Number ,并返回一个接受 Number 数组的函数s 并返回一个新数组 Number秒。 (那是因为在这个系统中,-> 绑定(bind)到右边,所以 (a -> b -> c) 等同于 (a -> (b -> c)) 。在 Ramda 中,所有函数都是柯里化(Currying)的,你可以用任何初始参数集调用它们,并且在提供所有项之前,您将继续返回函数。因此对于 Ramda 函数,R.map(double)([1, 2, 3])R.map(double, [1, 2, 3]) 之间没有真正的区别。

关于javascript - 你如何阅读 ramda 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43435656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com