[英]how do you read the ramda docs?
我在理解Ramda docs的簽名時遇到麻煩。 例如,如果您查看map
則會看到此
Functor f => (a → b) → fa → fb
我看不到這種模式如何適合該示例:
var double = x => x * 2;
R.map(double, [1, 2, 3]); //=> [2, 4, 6]
此示例中的函子是[1,2,3]
,那么如何將它放在Functor f => (a → b) → fa → fb
的f
的簽名中? 另外, →
是什么意思?
我將在此處給出一個簡短的答案,但是將更完整的答案分布在一個類似問題的兩個答案中,這些答案又取自Ramda Wiki頁面 。 (免責聲明:我是該頁面的作者,也是Ramda本身的負責人之一。)
這分為兩部分:
Functor f => (a → b) → f a → f b
在粗箭頭( =>
)之前,我們對其余部分有約束。 在此示例中,唯一的約束是變量f
必須是Functor
。 函子是一種成員具有遵循某些法律的map
方法的類型。 並且聲明是在另一種類型上進行參數化的,因此我們不只是寫f
而是寫f String
, f Number
或更一般地寫fa
來表示一些未知類型a
。
細箭頭( ->
)是Function類型的縮寫。 所以不要寫
Function x y
我們可以改寫
x -> y
或需要避免歧義的時候。
(x -> y)
將它們放在一起,我們可以注意到,在R.map(double, [1, 2, 3])
,我們具有一個從Number
到Number
的函數( double
),這意味着我們的a
和b
都是Number
。 我們的函子是Array
。 因此,專業與這些類型的定義,我們有map
接受來自函數Number
來Number
,並返回一個函數,數組Number
S和返回一個新的數組Number
秒。 (這是因為在此系統中->
綁定到右側,所以(a -> b -> c)
等效於(a -> (b -> c))
。在Ramda中,所有函數都以這種方式進行管理可以使用任何初始參數集調用它們,直到提供所有術語之前,您都將繼續獲得函數。因此,使用Ramda函數, R.map(double)([1, 2, 3])
和R.map(double, [1, 2, 3])
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.